请解释以下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
???
答案 0 :(得分:3)
我不确定为什么这会被贬低 - 看起来像是一个关于可变性的好问题。
原因是字符串不可变 - 您可以用新值替换它们,但不能更改它们。
最终结果是
d[c].replace()
实际上不会更改该值,而是返回具有更新值的新字符串。
只有通过分配返回的值才能使源更改。
d[c] = d[c].replace(...)
“进行替换,然后使用替换值作为原始值”
答案 1 :(得分:1)
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
属性并根据正则表达式替换其“className”。
答案 2 :(得分:1)
(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");