javascript 中 无块级作用域
var name = "name"; function main(){ //console.log(name); if(1==1){ var name ="names"; } console.log(name); } main();
javascript 采用函数作用域
在JavaScript中每个函数作为一个作用域,在外部无法访问内部作用域中的变量。
function main(){ var value ="values"; } main(); console.log(value); // 报错:Uncaught ReferenceError: value is not defined
javascript 的作用域链,根据作用域链从内到外的优先级寻找,如果内层没有就逐步向上找,直到没找到抛出异常。
由于JavaScript中的每个函数作为一个作用域,如果出现函数嵌套函数,则就会出现作用域链。
javascript 的作用域链执行前已创建
example 1 作用域链:
全局作用域 -> Func函数作用域 -> inner函数作用域 xo = "alex"; function func(){ var xo = "eirc"; function inner(){ console.log(xo); } xo = "seven"; return inner; } var ret = func(); ret(); // seven
example 2 两条作用域链:
全局作用域 -> bar函数作用域 全局作用域 -> func函数作用域 xo = "alex"; function bar(){ console.log(xo); } function func(){ var xo = "seven"; return bar; } var ret =func(); ret();
声明提前
console.log(xo); // Uncaught ReferenceError: xo is not defined var xo; console.log(xo) //输出:undefined function foo(){ console.log(xo); var xo = "seven"; } foo(); //输出:undefined