函数里面的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声明的函数里的变量也会报错。

0
0

倩妞1号加油

2019-03-19

函数里面的声明应该是在函数的上下文中提前,不是提前到全局的执行上下文中...

0
0

双越

2019-03-16

建议把代码一起粘贴出来,方便其他同学一起查看该问题。

0
0

BAT大牛带你横扫初级前端JavaScript面试(第二版)

BAT高级前端工程师亲授,结合真实面试题,提高面试成功几率

4268 学习 · 817 问题

查看课程