搜索

首页  >  问答  >  正文

JavaScript在全局对象中声明变量,会成为一个全局对象的同名属性而在函数中声明变量则不会,为什么?

JavaScript中,在全局声明全局变量后,会成为全局对象的一个同名属性。但在函数中声明局部变量后,却不会成为函数(对象)的属性,而是要使用“函数名.属性名”才能声明,请问是什么原因?

仅有的幸福仅有的幸福2765 天前954

全部回复(7)我来回复

  • PHP中文网

    PHP中文网2017-06-26 11:00:35

    可以这样理解:

    在函数内部声明的变量属于函数执行上下文对象,而不是函数对象
    全局环境下声明的变量属于全局执行上下文对象,这个上下文对象就是全局环境对象

    回复
    0
  • 我想大声告诉你

    我想大声告诉你2017-06-26 11:00:35

    哪有什么原因,规定就是这样的。

    回复
    0
  • 巴扎黑

    巴扎黑2017-06-26 11:00:35

    历史遗留问题,建议使用严格模式消除迷惑。

    'use strict';
    
    var v = 2;
    console.log(window.v);   // undefined

    回复
    0
  • 大家讲道理

    大家讲道理2017-06-26 11:00:35

    如果你是说这样
    `function test(){

    var a = 1;     // 你说的a是test的属性。
        this.a = 1;// 这才是函数的属性,因为在JS里,“万物”皆对象(可能夸张了。)
                  //如果,还不明白,请自觉翻阅,“神奇的this”,"作用域"等基础JS章节

    }`
    //更新,错误改正。
    题主好好看基础。

    回复
    0
  • 我想大声告诉你

    我想大声告诉你2017-06-26 11:00:35

    我认为这就是函数变量的作用域问题,js是很灵活的,还望一起学习^~^ ^~^

    回复
    0
  • 淡淡烟草味

    淡淡烟草味2017-06-26 11:00:35

    JavaScript中,在全局声明全局变量后,会成为全局对象的一个同名属性。在函数中声明局部变量后,它就变成局部对象,也就是函数的属性,所以要先通过全局访问函数再访问函数中的局部变量。

    回复
    0
  • typecho

    typecho2017-06-26 11:00:35

    函数作用域啊

    回复
    0
  • 取消回复