Js作用域、上下文

//javascript 作用域(全局、函數(shù)、eval)
var a =10;    // 全局
(function(){  //函數(shù)
  var b = 20;
})();
a;
/*
10
*/
b;
/*
Exception: ReferenceError: b is not defined
@Scratchpad/1:9:1
*/
for(var item in{a:1,b:2}){
 console.log(item);
}
console.log(item);
eval("var a=1;");
//js 沒有塊級作用域 也就是說 for 還有if之類的聲明都是全局性的

//作用域鏈
function outer2(){
  var local2 =1;
  function outer1(){
    var local1 = 1;
    //這里可以范根到 局部變量local1,local2,和全局變量global3
  }
  outer1();
}
var global3= 1;
outer2();
//內(nèi)部可以訪問外部的變量

//利用函數(shù)作用域封裝
(function(){//匿名函數(shù)
  //do sth
  var a,b;//聲明局部變量 
})();
!function(){  //聲明函數(shù)表達(dá)式
  //do sth
  var a,b;
}();


//ES3執(zhí)行上下文Exec、變量對象(抽象概念)
/*vo按照如下順序填充
  1、函數(shù)參數(shù)(若為傳入,初始化改參數(shù)值為undefined)
  2、函數(shù)聲明(若發(fā)生命名沖突,會覆蓋)
  3、變量聲明(初始化變量值為undefined,若發(fā)生命名沖突,會忽略)  
*/  
function foo(x,y,x){
  function x(){
    alert(x);
  }  
}
foo(100);
//console.log  使用第二條判斷

function foo(x,y,z){
  function func(){};
  var func =1;
  console.log(func);
};
foo(100);
console.log(foo(100));//結(jié)果都是1 使用第三條判斷
//函數(shù)表達(dá)式不會影響VO
var e=function _e(){};
//這樣就可以解釋 為什么變量跟 函數(shù)可以前置;而 函數(shù)表達(dá)式不可以 會報(bào)錯(cuò)

//函數(shù)聲明 名字不可以省略 執(zhí)行提前 
alert(x);//function

var x=10;
alert(x);//x=10;
x=20;

function x(){};
alert(x);//20

if(true){
  var a=1;
}else{
  var b=true;
}

alert(a);//1
alert(b);//undefined











最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容