美文网首页JavaScript学习笔记
JavaScript函数变量的作用域

JavaScript函数变量的作用域

作者: 璀璨天宇 | 来源:发表于2016-12-15 00:42 被阅读6次

    1.变量最基本的作用域在函数体本身内部

    例子:

    'use strict';
    function foo(){
          var x=1;
          x=x+1;
    }
    x=x+2;  //这个写法会报错,因为无法在函数体外引用函数内部的变量
    

    ----同理两个函数间的变量是相互独立的,互不干涉。

    2.嵌套的函数,内部的函数能调用外部函数的变量,反之则不行。

    function foo(){
       var x=1;
       function bar(){
           var y=x+1;  //2
        }
          var z=y+1;  //这个会报错,外部函数不能访问内部的变量
    }
    

    3.内部变量屏蔽外部变量

    如果在嵌套函数中,内部和外部的变量名存在重名的现象,内部变量会屏蔽外部变量,这是因为JS在读取函数时是由内而外的读取的,内部的变量优先级更高,所以会屏蔽外部的变量。虽然内部的函数会不调用外部的变量,但是不会改变外部变量的值,外部的变量还是可以被外部的函数所调用的。

    use strict';
    
    function foo(){
        var x=1;
        function bar(){
            var x='A';
            alert('in bar='+x); //'A'
        }
        alert('in foo='+x);  //1
        bar();
    }
    

    4.写JS函数时,要遵循‘函数内部首先申明变量的原则’

    function foo(){
        var x=1,y='a',z,i;
        for(i=0;i<1;i++){
            ...
        }
    

    5.JS只有一个全局作用域,任何变量如没有在当前的作用域内找到,就会去上一层的作用域寻找,直到window的全局作用域内,如果到全局作用域内都找不到,就会报错。

    6.局部作用域

    由于函数的作用域是在函数体里面的,则函数的参数部分是不包括的,如for()。

    function foo() {
        for (var i=0; i<100; i++) {
            //
        }
        i += 100; // 仍然可以引用变量i
    }
    

    为了解决这个问题,通常把for中的varlet来替换

    相关文章

      网友评论

        本文标题:JavaScript函数变量的作用域

        本文链接:https://www.haomeiwen.com/subject/ogewmttx.html