console.log(a);
function test() {
a = 1;
}
test(); // 报错
第一个问题:
js是词法作用域不是动态作用域,也就是在代码写完时作用域就已经形成了,那么上面的那段代码在函数没有执行的时候在变量a没有声明的时候不是应该给window添加对应的这个属性名吗?这样无论函数是否一样会打印undefined的啊?
还有函数执行与否会影响打印结果,不就是变成动态作用域了吗?
同样还是第一个问题的引申,当函数内部的变量没有定义时,该变量是作为全局变量的,结合上面的案例我就更难理解了
function getProduct(num1, num2) {
product = num1 * num2;
return product;
}
var product = 10;
var number = getProduct(20, 20);
alert(product);//得到的弹出框是400
下面是第二个问题
var num = 10;
function test(){
console.log(num);
}
function test1(){
var num = 100;
test();
}
test1(); // 10
第二个问题: test函数的执行环境是test1作用域,所以会优先找test1中的变量num,为什么会是window中的变量?
莫回无
相关分类