为什么我的自制isset函数在javascript中完全不起作用?

时间:2014-10-16 14:20:17

标签: javascript scope

在一本试图说明全局/局部变量范围的书中,它使用这个例子来传达这个概念:

test();

if (isset(bar)){ 

    alert('bar must be global!');

}else{

    alert('bar must be local!');

}

function test(){

   var foo = 3;
   bar = 5;

}


function isset(varname){

    return typeof varname != 'undefined';

}

现在if返回警报' bar必须是全局的。',这是有道理的,因为传递给isset()的变量,bar,在这种情况下是全局的。但是为什么if语句没有返回警报(' foo必须是本地的');当你通过时我们会说你通过foo 在isset函数中。

2 个答案:

答案 0 :(得分:2)

"杆"未在函数test()中的任何位置声明。 Javascript然后假设它是一个全局变量。

为确保您不会犯这些错误,我建议您使用:

"use strict";

将该行放在文件的开头。它可以防止出现很多错误:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode

它将阻止未声明的变量充当全球变量

答案 1 :(得分:1)

由于您尚未使用var关键字,因此该变量在全局范围内定义,并且在执行测试功能后仍然存在。这将得到更彻底的解释here