window.onload = function(){
var b = 1;
alert(this);
Test();
}
function Test(){
alert(this);
alert(b);
}
test方法在onload事件函数里执行,那这方法应该是在onload事件函数的作用域内,同时我打印onload事件的指向与test方法的指向,都是window,不明白为什么方法Test获取不到变量b,往前辈们指点下,谢谢。
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
var 声明 b 和调用 b 是在两个独立的代码块内
独立的代码块内声明的变量不能互相调用。
this 指向是调用体所决定的。
调用时是 Test() 这种形式,这和 Test() 在哪写的无关。
你甚至可以将 Test() 理解为 window.Test() ,里面的 this 指向为 window
函数作用域是在声明时决定的,而不是运行时决定。
因为onload事件函数和test函数平级,自然找不到onload函数中的b咯
你先得了解,静态作用域(词法作用域)以及 动态作用域的概念。
之后可以了解AO/VO。
javascript 执行环境,变量对象,作用域链
因为变量b是在onload函数作用域下,并非在window作用域。而Test在全局作用域下声明的,不是在onload函数体内声明的,变量b也不会按闭包方式传入Test函数。
看完这篇文章你应该就懂了浅析JavaScript中作用域和作用域链
上下文环境和作用域关系在
声明时确定,与在哪里调用无关。