-5

请解释以下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???

4

3 回答 3

3

我不确定为什么这被否决了——看起来是一个关于可变性的好问题。

原因是字符串是不可变的——您可以用新值替换它们,但不能更改它们。

最终结果是

d[c].replace()

实际上并没有改变值,而是返回一个带有更新值的新字符串。

只有对返回值进行赋值,才能使源发生变化。

d[c] = d[c].replace(...)

“进行替换,然后将替换后的值用作原始值”

于 2013-02-20T21:05:33.840 回答
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属性并根据正则表达式替换其“类名”。

于 2013-02-20T21:03:15.350 回答
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");
于 2013-02-20T21:04:34.857 回答