请解释以下javascript代码行
(function (d, c) {
d[c] = d[c].replace(/\bno-js\b/, "js");
})(document.documentElement, "className");
此行替换文档元素类名称class="no-js"
,例如class="js"
它工作正常,但我不完全理解。
d[c] = d[c].replace
???
请解释以下javascript代码行
(function (d, c) {
d[c] = d[c].replace(/\bno-js\b/, "js");
})(document.documentElement, "className");
此行替换文档元素类名称class="no-js"
,例如class="js"
它工作正常,但我不完全理解。
d[c] = d[c].replace
???
我不确定为什么这被否决了——看起来是一个关于可变性的好问题。
原因是字符串是不可变的——您可以用新值替换它们,但不能更改它们。
最终结果是
d[c].replace()
实际上并没有改变值,而是返回一个带有更新值的新字符串。
只有对返回值进行赋值,才能使源发生变化。
d[c] = d[c].replace(...)
“进行替换,然后将替换后的值用作原始值”
Firs 创建函数
function(d, c){
d[c] = d[c].replace(/\bno-js\b/,"js");
}
它将函数包装()
成一个表达式,而不是一个语句,所以这种方式是可调用的,然后它传递参数
(documentElement, "className")
换句话说,执行以下代码:
document.documentElement["className"] = document.documentElement["className"].replace(/\bno-js\b/,"js");
然后检索文档的documentElement
属性并根据正则表达式替换其“类名”。
(function(d, c) {
d[c] = d[c].replace(/\bno-js\b/,"js"); }
)(document.documentElement, "className");
使用两个参数调用该函数。为清楚起见,我们将函数中的变量替换为用于调用函数的参数。
// Find the element in the DOM identified by "documentElement"
// and access its "className" property, which controls the attribute in
// the markup called "class"
document.documentElement["className"] =
// Then, take that same property (which is a string), and run
// .replace() on it, with a regex that says "find no-js separated by word
// boundaries", and replace that with js
// Finally, assign the result of that replacement to the original property.
document.documentElement["className"].replace(/\bno-js\b/,"js");