向函数传递字符串参数时为何需加单引号?代码报错求助
为什么传递字符串参数时需要加单引号?
这事儿的核心得从setTimeout接收字符串参数的工作原理说起:当你给setTimeout传一个字符串时,它会把这个字符串当成可执行的JavaScript代码片段去解析运行,就跟你直接在浏览器控制台敲这段代码效果一样。
咱们拆解两种情况看看:
第一种写法:
var repeat = "test_I('"+test+"')";
拼接之后,最终的字符串是test_I('less')——这是完全合法的JS代码:调用test_I函数,传入的是字符串字面量'less',浏览器能直接识别这是个字符串参数,所以能正常运行。第二种写法:
var repeat = "test_I("+test+")";
拼接之后得到的是test_I(less)——这时候浏览器会把less当成一个变量名去查找,但你从头到尾都没定义过叫less的变量啊!所以控制台自然会抛出ReferenceError: less is not defined的错误。
另外插一句:其实这种传字符串的写法早就不推荐了,更稳妥的方式是直接传函数,比如:
setTimeout(() => test_I(test), 10);
这样既不用纠结引号的问题,代码可读性也更高,还能避免字符串拼接带来的各种意外坑。
内容的提问来源于stack exchange,提问作者ice cold
相关产品推荐
相关产品推荐

