這告訴我我在這裏做錯了事,但我不知道它是什麼。
不,它只是告訴你,無論什麼工具告訴你,不理解你的代碼。
你不是打電話Float32Array
沒有new
,你只是指它。
代碼
this.Function("return Float32Array;");
...叫它在你的榜樣叫(這是鬆散模式)創建的屍體是return Float32Array;
的功能,這樣的方式:
function anon() {
return Float32Array;
}
。 ..但它在全球範圍內評估,而不是本地範圍。
您的包裝:
var Float32Array = (function() {
})()();
...是返回給定的函數,然後立即調用它的功能。所以你的Float32Array
變量最終變成Float32Array
在全局範圍內(繞過陰影)。
這就是說,請注意,這段代碼很容易被愚弄。也許它適用於Kad acadamy上下文,但只要將其分配給全局對象的Float32Array
屬性,或者在全局範圍內重新聲明它,它可能很容易被愚弄。
也就是說,它在這裏工作:
(function() {
// Khan academy code
function Float32Array() {
console.log("Mine");
}
// Your code
var y = (function() {
return this.Function("return Float32Array;");
})()();
var foo = new y(10);
console.log("Done", foo);
})();
,但會在這裏失敗:
(function() {
window.Float32Array = function() {
console.log("Mine");
};
var y = (function() {
return this.Function("return Float32Array;");
})()();
var foo = new y(10);
console.log("Done", foo);
})()
或這裏
function Float32Array() {
console.log("Mine");
}
var y = (function() {
return this.Function("return Float32Array;");
})()();
var foo = new y(10);
console.log("Done", foo);
...因爲全局符號被覆蓋。
該工具是Firefox的控制檯。感謝:D – SlySherZ
@SlySherZ:有趣的是,我沒有從Firefox的控制檯得到這個警告。你的意思是Firebug? *編輯:*我沒有從Firebug獲得它,但是我們可能會使用不同的版本(Firefox和Firebug)。 –
我使用的是Vanilla,更新了Firefox v43.0.4。沒有安裝相關的延伸。 – SlySherZ