作用域
全域性作用域
區域性作用域 :函式作用域
var name = 'xm';
function fn(argument)
console.log(***);
fn();
console.log(***) 這裡會發生報錯 ***變數是未定義的
全域性變數可以在區域性作用域中訪問到,區域性變數 在全域性作用域中訪問不到。
在js中沒有塊級作用域
如果有的話就叫做塊級作用域 比如
if (true)
for (var i = 0;)
如果有塊級作用域 裡面的變數 生也蕭何 敗也蕭何
變數物件
var name = 'xm';
function fn(argument)
fn.***
fn.fn2
}window.name
window.fn
name
fnconsole.log(window.name === name);
console.log(window.fn === fn);
fnconsole.log(window.person);
console.log(window.person);結果是undefined 未定義的屬性
作用域鏈
從最裡層作用域,通過作用域鏈可以訪問到最外層的變數,
內層變數的優先順序高於外層變數的優先順序。
js解析機制-預解析
預熱
var name = 'xm';
var age = 18;
function
fn()
fn();
很正常列印的結果是 xh,接著看下面
js解析過程 (預解析, 是對 var 宣告的變數 和 function 函式進行預解析需要注意的是 argument 和區域性變數同等對待)
預解析逐行解讀**
var name = 'xm';
var age = 18;
function
fn(argument)
fn();
這裡列印的的結果是undefined 原因
window
name = undefined
age = undefined
function
fn(argument)
fnname = undefined
age = undefined
argument = undefined
先預解析,window作用域下 name=undfined,age=undefined, fn,
在fn 作用域下預解析 name=undefined,age = undefined,argument= undefined
然後逐行執行** so 返回的結果是 undefined
解析詳解 js 作用域問題1
console.log(a);
var a = 1
;
返回結果 undefined
console.log(a);
a = 1
;
這裡會發生報錯 沒有var js不能正常預解析
js作用域問題2
console.
log(a);
var a = 1;
console.
log(a);
function
a()
console.
log(a);
var a = 3;
console.
log(a);
function
a()
console.
log(a);
a();
這裡返回的結果是
function
a() 11
33報錯
分析:在預解析中 現對var 和function 進行預解析,當var宣告的變數和 function宣告的變數相同發生命名衝突時 ,預解析結果保留function 當function 與後面的function 命名發生衝突(名稱相同) ,預解析結果保留最後乙個function ,
在逐行執行過程中a()返回的結果會報錯的原因是,在a()前面 執行的var a = 3 所以此時的變數a 是常用型別 3 然後會報錯。
3.js作用域問題三 (預解析是分標籤進行的)
JS作用域解析
瀏覽器 js解析器 1 js 的預解析,找3樣東西,變數,函式,引數 var function 引數 a undefined 所有的變數,在正式執行 之前,都提前賦了乙個值 undefined未定義 fn1 function fn1 所有的函式,在正式執行 之前,都是整個函式塊 遇到重名的 只留乙個...
JS變數作用域
先明確一點 討論作用域,討論的是非物件成員的變數。在函式以及自定義物件之外宣告的變數,具有全域性作用域 1.瀏覽器會建立乙個window物件,window的所有屬性,都具有全域性作用域 2.反過來,具有全域性作用域的變數,都是window的屬性 3.具有全域性作用域的變數,任何位置都可以訪問 通過上...
js 變數 作用域
一 基本型別與引用型別 針對引用型別值時,複製的只是乙個指標,複製操作結束後,兩個變數實際上將引用同乙個物件 如果是按引用傳遞的話,那麼p就會被自動修改為指向其name屬性為 greg 的新物件,但是由下圖分析可知,引數傳遞是按值傳遞 二 執行環境和作用域 var color blue functi...