gpt4 book ai didi

javascript - 表达式 eval(function(){ } ()) 在 javascript 中的作用是什么?

转载 作者:行者123 更新时间:2023-11-29 18:44:25 24 4
gpt4 key购买 nike

我在网页上找到了这个脚本:

eval(function(a, b, c, d, e, f) {
//do some thing here and return value
}(val1, val2, val3, val4, val5, {}))

你知道上面的表达式到底是做什么的吗?

最佳答案

让我们一个一个打开包装,首先是内部

function(a, b, c, d, e, f) {
//do some thing here and return value
}(val1, val2, val3, val4, val5, {})

事实上,让我们进一步简化它

(function() { //takes no paremeters
console.log("this was executed");
}())//no parameters given here

这叫做 an immediately invoked function expression或通常缩写为 IIFE。这很无聊,老实说,名称就是完整的描述,但让我改一下 - 这是一个声明然后立即执行的函数。这是由最后的 () 括号完成的 - 正是您执行函数的方式,例如 parseInt()。在这个简单的例子中,它只是简单地将一些东西打印到控制台并完成。

然而,它是一个普通函数,它可以做任何你想做的事情,包括接受参数:

(function(param1, param2) { //takes two parameters
console.log("this was executed with parameters", param1, param2);
}("hello", "world"))//these are passed to the function

因此,您可以做更多的事情。您甚至可以返回一个值,传递给函数的参数可以是变量:

var someVariable = "hello";
var anotherVariable = "world";

var resultFromIIFE = (function(param1, param2) { //takes two parameters
console.log("this was executed with parameters", param1, param2);
return param1 + param2;
}(someVariable, anotherVariable));

console.log(resultFromIIFE);

所以,希望这能清除内部部分。我会回来的。

至于 eval - 它需要一个 string 并将其作为 JavaScript 代码 执行。

eval("console.log('this comes from eval()')");


var evalCanReturnResults = eval("1 + 2");
console.log(evalCanReturnResults);


var a = 3;
var b = 4;
var evalCanUseVariables = eval("a + b");

console.log(evalCanUseVariables);

这是 eval 的快速速成类(class)。理解它可以接受任意字符串并将其作为 JS 执行就足够了。

因此,如果我们将两者放在一起,内部 IIFE 很可能会动态生成一些代码供 eval 执行。例如,你可以有这样的东西::

eval(function(limit, toPrint) {
return "for (var i = 0; i < " + limit + "; i++) { console.log('" + toPrint + "') }"
}(3, "foo"))

这将生成一个带有指定参数的 for 循环并执行它。

关于javascript - 表达式 eval(function(){ } ()) 在 javascript 中的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54958537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com