1、函数作用域自身的变量若未定义,则:
先从函数自身作用域中找的变量和方法,
找不到再从外部的作用域中找。
2、若函数作用域自身的变量已在函数内部中被定义了,则:
函数内部局部的变量的赋值并不影响外部全局的变量。
注意看一下几个例子
以下几个例子有差别
var a = 123;
/**解释如下
* fun的作用域中var a = 456处申明了a,
* 因为申明变量会提前
* 则实质为fun(){
* var a;
* alert(a); //undefined
* a = 456; //修改的是函数局部作用域内的a
* }
*/
function fun(){
alert(a); //undefined
var a= 456;
}
fun();
alert(a); //123
var a = 123;
/**
* fun的作用域中 a = 456处并没有申明a,
* 因为只能从外部找a的定义,
* 则实质为fun(){
*
* alert(a); //123
* a = 456; //修改的是全局作用域内的a
* }
*/
function fun(){
alert(a); //123
a= 456;
}
fun();
alert(a); //456
注意在函数中有形参相当于在函数中定义了形参
var a = 123;
/**
* fun的作用域中 a = 456处并没有申明a,
* 因为只能从外部找a的定义,
* 则实质为fun(a){ //定义了形参var a;
*
* alert(a); //没有值,undefined
* a = 456; //是函数作用域内(局部)的a
* }
*/
function fun(a){
alert(a); //undefined
a= 456; //修改的是局部变量函数作用域的a,对全局没有影响
}
fun();
alert(a); //123
var a = 789;
/**
* fun的作用域中 a = 456处并没有申明a,
* 因为只能从外部找a的定义,
* 则实质为fun(a){ //定义了形参var a = 123;
*
* alert(a); //初始值为123
* a = 456; //修改的是函数作用域内(局部)的a,对全局的没有影响
* }
*/
function fun(a){
alert(a); //123
a= 456;
}
fun(123);
alert(a); //789