账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    关于JS函数实例化后的内部变量,为什么输出是undefined?
    49
    0
    var foo = 1;
    function main() {
        console.log(foo);
        var foo = 2;
        console.log(this.foo);
        this.foo = 3;
    }
    new main();

    为什么两个输出都是undefined


    使用main()的时候,第二个输出是1,是有值的,现在实例化后,为什么就没有了?


    解析:

    • 使用main()调用本函数时,main()函数内的第一个输出console.log(foo)的时候,第二行的var foo = 2对于foo的定义提升了,但是还没有赋值,所以输出是undefined
    • 第二个输出console.log(this.foo) 的时候,this.foo的环境变量是window,所以输出是1
    • 使用new main()实例化main()后,函数内的第一个输出console.log(foo)的时候,也是因为foo定义提升了,但是没有赋值,所以还是undefined
    • 第二个console.log(this.foo)为什么是undefined呢,原因在于使用new实例化后,this会指向当前对象,而main()函数内的this.foo=3赋值也是在console.log(this.foo)之后,所以也是undefined

      var foo = 1;
      function main() {
          console.log(foo); // undefined
          var foo = 2;
          console.log(foo); // 2
          console.log(this.foo); // undefined
          this.foo = 3;
          console.log(this.foo); // 3
      }
      new main();
    1
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 追尋☆①秒方向 普通会员 1楼

      在JavaScript中,函数实例化后的内部变量在函数内部是不可见的,因此在函数外部无法访问它们。

      当您在函数内部创建一个变量并将其赋值给一个函数实例的内部变量时,函数内部的变量并不会被赋值给外部的变量。这就是为什么在函数内部创建的变量在函数外部是undefined的原因。

      这是一个示例:

      ```javascript function myFunction() { var myVariable = "Hello, World!"; console.log(myVariable); // 输出 undefined }

      myFunction(); ```

      在这个示例中,我们在myFunction函数内部创建了一个变量myVariable,并将其赋值为"Hello, World!"。然后,我们在函数外部尝试访问myVariable,但是它已经被赋值为undefined,因此我们得到的是undefined。

      因此,您需要在函数内部访问变量时使用全局变量,或者在函数外部声明并初始化这些变量。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部