close

少用 eval(),使用 eval() 有安全疑慮,因為被執行的代碼(例如從網絡來)可能已被篡改。

同樣重要的是要記住,給 setInterval()、setTimeout() 和 Function() 構造函數傳遞字符串,大部分情況下,與使用 eval() 是類似的,因此要避免。在幕後,JavaScript 仍需要評估和執行你給程序傳遞的字符串:

// 反面示例
setTimeout("myFunc()", 1000);
setTimeout("myFunc(1, 2, 3)", 1000);

// 更好的
setTimeout(myFunc, 1000);
setTimeout(function () {
   myFunc(1, 2, 3);
}, 1000);

若在 eval() 中宣告變數 , 會視為全域變數 , 建議改用 new Function()

eval( "var un = 1; console.log(un);"); // logs "1" <<< 不建議

new Function("var deux = 2; console.log(deux);")(); // logs "2"

(function () {
   eval( "var trois = 3; console.log(trois);");
}()); // logs "3"

console.log(typeof un); // number
console.log(typeof deux); // "undefined"
console.log(typeof trois); // "undefined"

使用 eval() 可以直接使用外部的變數,而使用 Function() 不行

(function () {
   var local = 1;
   eval("local = 3; console.log(local)"); // logs "3"
   console.log(local); // logs "3"
   Function("console.log(typeof local);")(); // logs undefined
}());

arrow
arrow
    全站熱搜

    vivian 發表在 痞客邦 留言(0) 人氣()