zoukankan      html  css  js  c++  java
  • 理解作用域 Minoz

      

    1.全局作用域

    var global = "global";   
    for(var i = 0; i <8; i++) {
        var a = 10;       
    }
    console.log(global);  //global
    console.log(i);          //8
    console.log(a);         //10

    扫一眼感觉没什么就是这个答案呀,可是你是否还记得但年大年湖畔的c和c++么?想起来了吧!javascript是没有块级作用域的,因此对于js来说变量i和a都是全局变量,所以皆可以输出i和a的值。

    那么,js里没有办法块级作用域,使变量成为局部变量么,答案当然是肯定的啦!

    方法1.使用立即函数

    (function(){
        var part = "part"; 
    })();

    方法2.避免预编译

    !function() {  
        var a = 90;
    }();
    +function() {  
        var a = 80;
    }();

    2.函数作用域

    function func() { 
        var b = 0;
    }
    console.log(b);    //b is not defined

    函数作用域,只在函数内部有效。

    好,那再来一个

    function func() {
        num =  12;
    }
    alert(num);  //12

    由于没有用var声明变量,会默认为是全局变量,因此可以访问到。

    最后,再来说一下作用域链

    var color = "red";
    function getColor() {
        return color;
    }
    alert(getColor());  //red

    当调用getColor()时,返回变量color,首先会搜索getColor()变量的对象,若没有就去搜索getColor()上一级是否有color变量,就这样一级一级向上找(到全局变量停止)直到找到最近的color变量返回其值,这形成了一条作用域链。下图展示搜索过程:

     

  • 相关阅读:
    oAuth 认证
    Javascript事件循环机制 浅尝手记
    Javascript闭包与作用域this
    SASS笔记
    FragmentActivity和Activity的区别及何时使用两者
    在fragment中获取Application数据
    Android中得到view在父容器中的位置下标
    设置android模拟器每次启动都按一定比例显示
    eclipse 导入web项目包
    拷贝Eclipse Workspace的设置
  • 原文地址:https://www.cnblogs.com/nalixueblog/p/4390774.html
Copyright © 2011-2022 走看看