首页 > 代码库 > js作用域

js作用域

本人初入前端,下面是自己在学习过程中整理的一些关于作用域的介绍:

   定义:
    作用域:
//域:空间 范围 ,区域....
//作用:读 写
//作用域链:从子级返回父级(当js解析器在函数内部找不到某个变量或值的时候会跳出来)
/* script(域) 全局函数 局部变量:
自上而下
函数 function:
由里而外
json
*/

/*
// 函数执行过程我们可以理解为:
浏览器:
js解析器:
1)找一些东西 “var function参数”
a=未定义 所有变量在正式运行代码之前都赋了一个值:未定义
function aa(){alert(1)}
所有函数在正式运行代码之前都是整个函数块
js的预解析:
重名:
1) 当变量和函数重名了,只留下函数
2) 当函数和函数重名了就遵从上下级顺序留下之后的

2)逐行解读代码:
表达式:= + - * / % ++ -- !参数....
表达式可以修改预解析的值
函数调用
function(局部的域) a(){
1)预解析
2)逐行解读代码
}


*/
window.onload = function () {
/*
情景一:
alert(a); // 未定义
var a = 1;

function fn1() {
alert(1);
}

*/

/*
情景二:

alert(a); // function a() {alert(4);}
var a = 1;
alert(a); //1

function a() {
alert(2);
}
alert(a); // 1
var a = 3;
alert(a); // 3

function a() {
alert(4);
}
alert(a); // 3
alert(typeof a);
//a(); //报错 因为在js预解析的仓库里 a的值被改为3了

*/
//测试:
/*
测试一:
var a = 1;

function fn1() {
alert(a); // 未定义
var a = 2;
}
fn1();
alert(a); // 1

*/
/*
测试二:
var a = 1;

function fn1() {
alert(a); // 1
a = 2;
}
fn1();
alert(a); // 2

*/
/*
* 测试三:
* var a = 1;
//参数的本质就是一个局部变量
function fn1(a) {
alert(a); // 未定义(就近原则找a)
a = 2;
}
fn1();
alert(a); // 1
* */
/*
测试四:
var a = 1;
function fn1(a) {
alert(a); // 1
a = 2;
}
fn1(a);
alert(a); // 1
*/
}
第一写博客,写的不正确和不好的地方望大神多多指教!!

js作用域