关于传参的问题!

function t(flag){
    if(flag){
        s="ifscope";
        for(var i=0;i<2;i++);
    }
    console.log(i);
}
t(true);
console.log(s);

不太理解这段代码什么意思。
为什么加上t(true);后,最后一句就可以执行了?不加的话,就会报错?

阅读 3.4k
4 个回答

变量s前面没有var,为全局变量

    function t(flag){

        if(flag){
           s="ifscope";
            for(var i=0;i<2;i++);
        }
        console.log(i);
    }
    //t(true);//声明了全局变量s
    console.log(s);//s is not defined;

题主可以试着看一下控制台console的英文报错
图片描述

首先要明确,在未声明变量时,想要打印出变量的值是会报错的。
其次,要明白执行t(true)后会声明一个全局变量s,值为ifscore

我想这样就能明白,加上t(true)不会报错,而不加会报s is not defined(…)的错误了

应该在控制台里看下报的什么错,一般都能找到原因的,错误类型很多,一般会错误信息会指向出错的那一行代码,在这里就是变量没声明

function t(flag){
    if(flag){
        s="ifscope";
        for(var i=0;i<2;i++);
    }
    console.log(i);
}
t(true);//这是你调用函数的,你没有调用,里面的代码自然不会执行,不执行,s就没有声明,然后你console.log(s)就自然找不到s咯,找不到就报错 s is not defined咯。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题