84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
JavaScript中,在全局声明全局变量后,会成为全局对象的一个同名属性。但在函数中声明局部变量后,却不会成为函数(对象)的属性,而是要使用“函数名.属性名”才能声明,请问是什么原因?
可以这样理解:
在函数内部声明的变量属于函数执行上下文对象,而不是函数对象全局环境下声明的变量属于全局执行上下文对象,这个上下文对象就是全局环境对象
哪有什么原因,规定就是这样的。
历史遗留问题,建议使用严格模式消除迷惑。
'use strict'; var v = 2; console.log(window.v); // undefined
如果你是说这样`function test(){
var a = 1; // 你说的a是test的属性。 this.a = 1;// 这才是函数的属性,因为在JS里,“万物”皆对象(可能夸张了。) //如果,还不明白,请自觉翻阅,“神奇的this”,"作用域"等基础JS章节
}`//更新,错误改正。题主好好看基础。
我认为这就是函数变量的作用域问题,js是很灵活的,还望一起学习^~^ ^~^
JavaScript中,在全局声明全局变量后,会成为全局对象的一个同名属性。在函数中声明局部变量后,它就变成局部对象,也就是函数的属性,所以要先通过全局访问函数再访问函数中的局部变量。
函数作用域啊
可以这样理解:
在函数内部声明的变量属于函数执行上下文对象,而不是函数对象
全局环境下声明的变量属于全局执行上下文对象,这个上下文对象就是全局环境对象
哪有什么原因,规定就是这样的。
历史遗留问题,建议使用严格模式消除迷惑。
如果你是说这样
`function test(){
}`
//更新,错误改正。
题主好好看基础。
我认为这就是函数变量的作用域问题,js是很灵活的,还望一起学习^~^ ^~^
JavaScript中,在全局声明全局变量后,会成为全局对象的一个同名属性。在函数中声明局部变量后,它就变成局部对象,也就是函数的属性,所以要先通过全局访问函数再访问函数中的局部变量。
函数作用域啊