以下是许多用户脚本中使用的代码:
function with_jquery(f) {
var script = document.createElement("script");
script.type = "text/javascript";
script.textContent = "(" + f.toString() + ")(jQuery)";
document.body.appendChild(script);
};
除了这一行,我理解其中的一切:
script.textContent = "(" + f.toString() + ")(jQuery)";
我知道文本内容设置了脚本的文本内容(当然),但我无法理解=
之后的所有内容。不应该这样:
script.textContent = string;
答案 0 :(得分:1)
通过用(
f.toString())(jQuery)
包装字符串,用户正在设置要作为immediately invoked function expression执行的字符串,并将jQuery对象传递给该函数。
我们希望f.toString()
看起来像
function($){ [doing something...] }
这样jQuery对象就代表$
当然,仍然需要评估新字符串。
答案 1 :(得分:1)
该函数使用以下代码创建一个脚本元素:
(content-of-f)(jQuery)
因此,如果传递包含函数的字符串(例如function($) { do something }
),则在jQuery
- 参数传递$
时执行该函数。
答案 2 :(得分:1)
匿名函数:
(function(){
//Normal code goes here
})
真正有趣的部分是当我们在最后添加这个时发生的事情:
();
这两个小括号会导致前面括号中包含的所有内容 立即执行。
当你写下(jquery)()
时如下:
(function(a){
console.log(a === jquery); //Returns 'true'
})(jquery);
您的代码中对'jquery'的所有引用都可以重命名为'a'。检查此CHEK THIS