setInterval("alert('welcome')", 1000); // 使用 'welcome' 字面量

发布时间 2023-11-11 01:16:06作者: 龙陌

setInterval(alert('welcome'),1000); 立刻弹窗welcome 只弹一次
setInterval(alert(welcome),1000); 没有定义welcome 报错一次

setInterval("alert('welcome')",1000);每隔一秒弹窗welcome一次
setInterval("alert(welcome)",1000);没有定义welcome 每隔一秒报错一次

let welcome='welcome'
setInterval("alert(welcome)",1000); 每隔一秒弹窗welcome一次

别管welcome有没有声明

setInterval传递的第一个参数是字符串,你要他怎么执行?

如果第一个参数不是字符串,才会涉及到welcome要作为变量输出,还是作为字符串输出的问题

正确输出:字符串

setInterval(alert('welcome'),1000);
错误输出:1、welcome作为变量未定义 :ReferenceError: welcome is not defined

setInterval(alert(welcome),1000);
错误输出:2、setInterval第一个参数是字符串 :SyntaxError: Invalid or unexpected token

setInterval(“alert('welcome')”,1000);

参考 MDN 上的说明, setInterval 有两种调用方式:

var intervalID = setInterval(func, [delay, arg1, arg2, ...]);
var intervalID = setInterval(code, [delay]);

第一种用法是最常见的, 第一个参数传入的是一个函数, 例如

setInterval(function () { alert("welcome") }, 1000);

会每隔一秒弹窗一次.

第二种用法比较少见, 第一个参数传入的是一个 string 类型的代码 code, 会被类似于 eval() 函数的方式解释执行, 例如

setInterval('alert("welcome")', 1000);

会每隔一秒弹窗一次.

其相当于

setInterval(function () { eval('alert("welcome")') }, 1000);

这道题的代码有两个地方错误:

setInterval(“alert(welcome)”, 1000); // 错误写法!!!

第一个地方是使用了中文引号, 这个就不多说了.

第二个地方是内部的 welcome 既不是字符串字面量, 也不是变量 (没有定义 welcome 变量), 因此即使第一个地方改用了英文引号, 也仍然会报错.

正确写法是:

setInterval("alert('welcome')", 1000); // 使用 'welcome' 字面量

var welcome = "welcome"; // 定义了 welcome 变量
setInterval("alert(welcome)", 1000);

顺带一提, 高赞半斤六两5的写法:

setInterval(alert('welcome'), 1000); // 错误写法!!!

是错误的, 因为 setInterval() 的第一个参数应该传入函数, 例如传入 function () { alert('welcome') } 或 () => alert('welcome'), 而 alert('welcome') 是一个立即执行了的函数, 其返回值会被当成第一个参数传入 setInterval(), 但是 alert('welcome') 返回值并不是一个函数, 因此是错误的