JavaScript 特殊理解

2021-08-17 17:09:14 字數 1553 閱讀 3576

js

var data = ;

for (var k = 0; k < 3; k++) ;

}console.log("outer: "+k);

data[0](); // 3, 而不是0

data[1](); // 3, 而不是1

data[2](); // 3, 而不是2

eval()和function構造不同

eval()可以干擾作用域鏈.

而function()更安分守己些。

不管你在**執行 function(),它只看到全域性作用域。所以其能很好的避免本地變數汙染。在下面這個例子中,eval()可以訪問和修改它外部作用域中的變數,這是 function做不來的(注意到使用function和new function是相同的)。

(function () ());

(function () ());

ecmascript只使用靜態(詞法)作用域(而諸如perl這樣的語言,既可以使用靜態作用域也可以使用動態作用域進行變數宣告)。

var x = 10;

function foo()

(function (funarg) )(foo);

技術上說,建立該函式的父級上下文的資料是儲存在函式的內部屬性 [[scope]]中的

所有物件都引用乙個[[scope]]

這裡還要注意的是:在ecmascript中,同乙個父上下文中建立的閉包是共用乙個[[scope]]屬性的。也就是說,某個閉包對其中[[scope]]的變數做修改會影響到其他閉包對其變數的讀取:

var firstclosure;

var secondclosure;

function foo() ;

secondclosure = function () ;

x = 2; // 影響 ao["x"], 在2個閉包公有的[[scope]]中

alert(firstclosure()); // 3, 通過第乙個閉包的[[scope]]

}foo();

alert(firstclosure()); // 4

alert(secondclosure()); // 3

Javascript理解this物件

this是函式執行時自動生成的乙個內部物件,只能在函式內部使用,但總指向呼叫它的物件。通過以下幾個例子加深對this的理解。1 作為函式呼叫 var name jenny function person console.log person jenny上面這個例子在全域性作用域中呼叫person 此...

javaScript閉包理解

以下是樓主的見解,如有錯誤請幫忙矯正。以下是是乙個簡單的閉包例子 function creatfunc var myfunc creatfunc alert myfunc 變數variable是乙個閉包,閉包的生命週期一般為呼叫閉包的物件為空 null 時結束。舉乙個複雜點的例子 var singl...

理解JavaScript原型鏈

主要是利用了 proto 這個隱式原型將所有的繼承串在了一起,實現了原型鏈 下面是乙個new itemtest 的例項,它的 proto 就指向了繼承的itemtest的prototype,然後再向上 proto 就是test的prototype,由此構成了原型鏈 ecmascript將原型鏈作為實...