最近在学习javascript,把自己能够理解的记录下来
var x = "hello";
var test = function(){
console.log(x); //弹出"undefined"
var x = "hi";
console.log(x); //弹出"hi"
}
test();
x='hello'是一个全局作用域,在函数作用域test中打印变量x,涉及到变量提升,会先从自身查找局部变量x,已经找到,不会再继续向上查找。这个时候指向全局对象,也就是window.
上面的例子和下面的这个是等价的,变量提升(先调用,后声明)
var x = "hello";
var test = function(){
var x;
console.log(x); //弹出"undefined"
var x = "hi";
console.log(x); //弹出"hi"
}
test();
var x = "hello";
function test(){
console.log('打招呼说' + x);//弹出"hello";
}
test();
在本身查找不到就查找到全局变量x,所以打印出来是hello
当调用test()函数时,形成的作用域链为‘调用对象’==》‘全局对象’
打印(x)时,首先查找调用对象(test函数)是否有x的属性,如果有则使用‘调用对象’的x,如果没有,就接着查找‘全局对象’是否有x的属性。
还没有写全,(只有自己看的明白就行了)下次再补
网友评论