這篇文章主要介紹了深入理解javascript中的左查詢和右查詢,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟著小編過來看看吧
值與引用
作用域
狹義上說作用域就是一個物件(更確切的來說應該是集合);
廣義上來說作用域是一套用來儲存變量,並且之後可以方便的找到這些變量的規則;
#作用域負責收集並維護由所有聲明的標識符組成的一系列查詢,並實施一套非常嚴格的規則,確定目前執行的程式碼對這些識別碼的存取權限。
程式碼(全域程式碼,函數體,eval程式碼)執行前的準備工作:
1.提升(變數函數函數表達式);
#2.確定this指向;
#3.與對應作用域關聯;
如果程式碼段是函數體,那麼在此基礎上需要附加:參數賦值,arguments 賦值;
作用域與執行上下文環境的關係:
#一個作用域下可能包含若干個上下文環境。有可能從來沒有上下文環境(函數從來就沒有被呼叫過);有可能有過,現在函數被調用完畢後,上下文環境被銷毀了;
左/右查詢
(function(){ function test(a){ b=a; console.log(b);//2 } test(2); })(); console.log(b);//2
console.log(a);//ReferenceError: a is not defined
//a并未定义赋值 console.log(typeof a);//undefined
RHS,LHS都會拋出ReferenceError異常
##右查詢在查詢所有的嵌套作用域中遍尋不到所需的變量,引擎就會拋出ReferenceError異常,但需要注意typeof時不會報異常;
#1.在程式中使用全域變數DEBUG作為「偵錯模式」開關,我們在DEBUG.js檔案的宣告var DEBUG =true;該檔案只在開發和測試時才被載入到瀏覽器,在生產環境中不予載入;
if(DEBUG){ //在生产环境中会报错 console.log("开始调试"); } if(typeof DEBUG !== "undefined"){ console.log("开始调试"); }
if(typeof polyfill_a === "undefined"){ //注意这一块不需要var,跟变量的提升有关 //这一块需要使用函数表达式而不是函数声明 polyfill_a = function(){ //功能代码 } }
以上是深入理解javascript中的左查詢和右查詢的詳細內容。更多資訊請關注PHP中文網其他相關文章!