cainiaoyep 2016-10-06 10:09 采纳率: 50%
浏览 901
已采纳

菜鸟求助:js中作用域的问题

本人前端菜鸟一枚,js的作用域感觉巨难懂,问题如下:

 function local() {
     var localVariable = {
        color: red,
        sayColor: function() {
            return this.color;
        }
     };
     function localFunction() {
        return localVariable;
     }
 }

 var globalVariable = {
     color: 'green',
     sayColor: function() {
        return this.color;
     }
 };
 function globalFunction()  {
     return globalVariable;
 }

如上代码:
1、globalVariable和globalFunction均在全局作用域里,那么globalVariable里的color和sayColor有作用域吗?请具体讲解一下。
2、针对globalVariable与globalFunction相对于windows,那么globalVariable相对于其里面的color和sayColor的地位与作用,与windows一样吗?

  • 写回答

1条回答 默认 最新

  • 当作看不见 2016-10-06 10:31
    关注

    globalVariable里的color和sayColor都是globalVariable的属性,也就是说如果在这个作用域内,能使用globalVariable,那么自然也可以调用相应的属性,这两个的作用域是没有的(也可以说和对象一致)
    2.这个和第一个问题是相同的,
    变量的作用域(把所有的东西包括函数对象都看成变量吧)是有一个作用域链的,就和原型链一样,是一层一层往上找,作用域小的优先级高,
    例如

     var s=100;
     alert(s);//输出100;全局变量
     function h(){
     var s=10;  
     alert(s);//10 ,由于在这个作用域链中,这个函数中有了一个s,那就不会往上找,
     }
     function h1(){
      alert(s);//100,这个作用域中没有s,往上找,找到全局变量100
     }
     function h2(){
      alert(s);//undefind   这个是作用域的提升,由于里面有一个s ,就不会去找全局变量 ,但是输出前。没定义。输出undefined
        var s=5;
        alert(s)//5
     }
     //还有一个势函数闭包,可以向下一层访问,就是反过来。基本就这样
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 keepalive配置业务服务双机单活的方法。业务服务一定是要双机单活的方式
  • ¥50 关于多次提交POST数据后,无法获取到POST数据参数的问题
  • ¥15 win10,这种情况怎么办
  • ¥15 如何在配置使用Prettier的VSCode中通过Better Align插件来对齐等式?(相关搜索:格式化)
  • ¥100 在连接内网VPN时,如何同时保持互联网连接
  • ¥15 MATLAB中使用parfor,矩阵Removal的有效索引在parfor循环中受限制
  • ¥20 Win 10 LTSC 1809版本如何无损提升到20H1版本
  • ¥50 win10 LTSC 虚拟键盘不弹出
  • ¥15 寻找能匹配的液晶显示屏。
  • ¥30 微信小程序请求失败,网页能正常带锁访问