函数里面的var a 不是提前到函数的内部吧, 不是应该提升到函数外面吗,var 全局的呀?
来源:16-2 作用域和闭包-执行上下文-代码演示
爬上屋顶看风景
2019-03-16
3回答
-
阿感
2019-07-14
函数里有var 声明的和函数,那么执行函数前会变量提前,如果没有var声明的,如a = 100,也没有内部函数情况下,那么里面并没有提前操作。这个a相对于内部函数是全局的,这个函数外可以访问。
函数里执行上下文是调用函数执行前的时候,在自身函数里操作,跟全局执行上下文分开。不是提前到全局的执行上下文里。
个人理解,修正后~
fn1();
function fn1() {
console.log(a); //undefined
a = 11;
console.log(a); //11
fn2();
function fn2() {
console.log(a); //11
a = 12;
console.log(a); //12
c = 14;
console.log(d); //undefined
d = 15;
var d;
console.log(d); //15
// console.log(b); //报错未定义
}
console.log(a); //12
console.log(c); //14
// console.log(d);报错,d未定义
var a;
// console.log(b); 报错未定义
// fn3(); 报错b未定义
b = 13;
console.log(b); //13
function fn3() {
console.log(b); //13
}
fn3();
}
// console.log(a); 报错,a未定义
console.log(b); //13
console.log(c); //14
可以测试测试看这个~
b没有使用var,是在fn1函数里的, b 和 fn1都相当于全局的。
c没有使用var, 是在fn2里的 。c也是全局的。
但是没有var声明的,没有变量提前,所以打印b的时候一定得在放在赋值后面否则报错,如fn3,调用在b = 13 的前面,会报错。函数调用后,获取b正常输出。
没调用函数情况下,外面获取这个没用var声明的函数里的变量也会报错。
00 -
倩妞1号加油
2019-03-19
函数里面的声明应该是在函数的上下文中提前,不是提前到全局的执行上下文中...
00 -
双越
2019-03-16
建议把代码一起粘贴出来,方便其他同学一起查看该问题。
00
相似问题