js 为什么提示函数未定义

functiona(){vari=1;varx;varb=function(){console.log(i);i++;if(i==5){clearInterval(x);... function a(){
var i = 1;
var x;
var b = function(){
console.log(i);
i++;
if(i==5){
clearInterval(x);
return;
}
}
x = setInterval("b()",1000);
}
a();
提示 setInterval 里的b() 没有定义?这是怎么回事?当然把b前面的var去掉变成全局变量就能通过。我只想知道为什么不能在函数内部定义
展开
 我来答
Aileen0509
2016-08-04 · TA获得超过1492个赞
知道小有建树答主
回答量:371
采纳率:0%
帮助的人:420万
展开全部

是作用域的问题。因为你的变量 b 是定义在函数 a 作用域里的。setInterval 第一个参数可以是 function,也可以是 code(字符串)。如果是 code 的话,code 将会使用 eval()() 执行,eval() 执行会带来很多问题,所以这种方法不被推荐使用

你这个例子就是因为 eval 在执行的时候作用域在顶层,也就是会在 window 下找你的 b 函数,所以就是 undefined。

推荐你使用 function 做第一个参数,代码就可以写成:

var x = setInterval( function() {
    console.log( i );
    if( ++i == 5 ) {
        clearInterval( x );
    }
}, 1000 );
大神儿解说
2016-08-04 · 跟着大神儿看超燃影视,让你的生活燃起来
大神儿解说
采纳数:87 获赞数:161

向TA提问 私信TA
展开全部
这么写就不会报错了

x = setInterval(b,1000);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式