如何在JAVASCRIPT中通过变量传递参数

时间:2015-04-09 06:48:07

标签: javascript optimization google-closure-compiler

在高级模式下通过closure-compiler优化我的JS时,我收到警告消息并且没有编译。

  

JSC_TYPE_MISMATCH:实际参数1   Document.prototype.getElementById与形式参数

不匹配

我的js函数更改了div的类

for (kx = 1; kx <= 5;kx=kx+1) {
document.getElementById(kx).className='newclass';
    }

在HTML中我有五个div如下

<div id='1' class ='first'> contents </div>
<div id='2' class ='first'> contents </div>
<div id='3' class ='first'> contents </div>
<div id='4' class ='first'> contents </div>
<div id='5' class ='first'> contents </div>

此代码在正常情况下工作(没有压缩/优化),但在尝试优化它时显示警告/错误,我该如何解决?

1 个答案:

答案 0 :(得分:4)

Closure希望您将string传递给document.getElementById()而不是number

  

JSC_TYPE_MISMATCH:实际参数1   Document.prototype.getElementById与形式参数
不匹配   发现:号码   必需:字符串
在第3行第24个字符

document.getElementById(kx).className='newclass';

因此,明确地将kx转换为string 1 应删除该警告:

for (kx = 1; kx <= 5; kx++) {
    document.getElementById(kx.toString()).className='newclass';
}
但是,我不知道我会打扰他。原来实际编译。你有一个警告而不是一个错误(我怀疑),因为一个数字参数将被强制转换为一个字符串。也就是说,如果您的环境通过各种方式促进对错误的警告......跳过篮球。

1 值得注意的是,您可以通过简单地连接空字符串,即:''+kx,并允许type-coercion来将数字转换为字符串做它的事。我选择使用Number.prototype.toString()因为,为了实例,方法调用更清楚地表明了意图。