JavaScript函数变量的作用域

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函数变量的作用域)