用eval()方法進行求值
eval()方法將執(zhí)行傳入的代碼的字符串钟病,并在調(diào)用eval()方法的作用域內(nèi)進行代碼求值瘤礁,最后返回傳入字符串中最后一個表達式的執(zhí)行結(jié)果。
console.log(eval("5 + 5")); // 10
eval("var a = 5;");
console.log(a); // 5
// 僅在調(diào)用eval()方法的作用于內(nèi)進行求值
(function () {
eval("var a = 6");
console.log(a); // 6
})();
console.log(a); // 5
// 返回最后一個表達式的執(zhí)行結(jié)果
var b = eval("3+4; 5+6");
console.log(b); // 11
在全局作用域內(nèi)求值操作
eval()方法求值的作用域就是調(diào)用eval()時的作用域,要讓代碼字符串在全局作用域內(nèi)進行求值,可以將代碼字符串放在動態(tài)生成的<script>標簽內(nèi)郑象,并將其插入到文檔中
function globalEval(data) {
// 去除字符串前后空格
data= data.replace(/^\s*|\s*$/g,"");
if(data){
var head = document.getElementsByTagName("head")[0] || document.documentElement;
var script = document.createElement("script");
// 創(chuàng)建script節(jié)點
script.tpye = "text/javascript";
script.text = data;
// 將節(jié)點附加到DOM上,再去除它
head.appendChild(script);
head.removeChild(script);
}
}
globalEval("var a = 1");
console.log(window.a); // 1
查找函數(shù)的參數(shù)名稱
使用函數(shù)的toString()方法可以返回函數(shù)的原始文本茬末,并且包含原始聲明的所有空格厂榛,包括行結(jié)束符。
function getArgumentName(fn) {
var found = /^[\s(]*function[^(]*\(\s*([^)]*?)\s*\)/.exec(fn.toString());
return found && found[1] ? found[1].split(/,\s*/) : [];
}
function a(x, y, z) {}
console.log(getArgumentName(a)); // ["x", "y", "z"]