gpt4 book ai didi

javascript - block 内的代码包装在括号内。为什么?

转载 作者:行者123 更新时间:2023-12-01 03:32:26 25 4
gpt4 key购买 nike

我碰到了这段代码,却不明白为什么块内的代码像自动执行功能一样被包裹在括号中。

function foo(a,b) {
var b = b || window,
a = a.replace(/^\s*<!(?:\[CDATA\[|\-\-)/, "/*$0*/");
if (a && /\S/.test(a)) {
(b.execScript || function (a) {
b["eval"].call(b, a)
})(a);
}
}

第一个参数是脚本标签中的文本。我唯一不了解的部分是为什么脚本eval被包裹在括号中。

最佳答案

我假设您正在谈论这一部分:

(b.execScript || function (a) {
b["eval"].call(b, a)
})(a);

这是简短的写作形式:
if (b.execScript) {
b.execScript(a);
}
else {
b["eval"].call(b, a);
}

即如果已定义,则执行 b.execScript,否则调用 b["eval"].call(b, a)

分组运算符的目的是在函数调用之前评估 ... || ...,即无论分组运算符的结果如何,都将其视为函数并通过将 a传递给函数来进行调用。

看起来代码可以简化为
(b.execScript || b["eval"])(a);

尽管如果必须将 this显式设置为 b是必要的,那么函数表达式也是必需的,以具有仅接受一个参数 a的两个函数。

关于javascript - block 内的代码包装在括号内。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15341854/

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