javascript对象变量和函数

Dan*_*Dan 5 javascript

第一个问题

var obj = function(){  
    var a = 0;  
    this.b = 0; 
}
Run Code Online (Sandbox Code Playgroud)

是否有行为有什么区别ab


第二个问题

var x = 'a';
var f1 = function(x){ alert(x) }
var f2 = new Function('alert('+x+')')
Run Code Online (Sandbox Code Playgroud)

f1和的行为有什么不同吗?f2

Dav*_*und 5

问题1

var obj = function() {
   var a = 0;
   this.b = 0;
}
Run Code Online (Sandbox Code Playgroud)

在函数中,您将能够访问这两个变量,但在这种情况下

var x = new obj();
Run Code Online (Sandbox Code Playgroud)

......你将能够访问x.b,但不是x.a.

问题2

由于您的问题目前已写入,因此语法错误.以下将有效:

var x = 'a';
var f1 = function(x){ alert(x) }
var f2 = new Function('alert('+x+')')
Run Code Online (Sandbox Code Playgroud)

......但这与写作是一回事:

var x = 'a';
var f1 = function(x){ alert(x) }
var f2 = new Function('alert(a)')
Run Code Online (Sandbox Code Playgroud)

这里的区别是显而易见的.f1忽略全局变量x并警告传递给它的任何内容,同时f2忽略全局变量x,并尝试查找全局变量a.这可能不是你想要问的问题.

你可能想要的是这样的:

var x = 'a';
var f1 = function(){ alert(x) }
var f2 = new Function('alert(x)')
Run Code Online (Sandbox Code Playgroud)

...... 或者这个:

var f1 = function(x){ alert(x) }
var f2 = new Function('x', 'alert(x)')
Run Code Online (Sandbox Code Playgroud)

上面两个替代方案之间的区别在于第一个总是使用全局变量x,而第二个从不使用任何全局变量.两个例子中内部f1和之间的区别f2完全没有.

这是生成完全相同结果的两种方法.您想要使用该f2方法的唯一原因是以某种动态方式生成代码时需要字符串输入以进行定义.一般来说,尽量避免这种做法.