Javascript 全局作用域中函数表达式和函数声明之间的差异
我对我的js中的某些东西感到困惑。通常我定义如下函数:Javascript 全局作用域中函数表达式和函数声明之间的差异,javascript,function,syntax,Javascript,Function,Syntax,我对我的js中的某些东西感到困惑。通常我定义如下函数: function f(){ // do stuff } f = function(){ // do stuff } 但我也可以定义如下函数: function f(){ // do stuff } f = function(){ // do stuff } 我一直认为它们之间没有区别,但我现在发现这是可行的: f = function(){ alert('IT WORKS!!'); } fu
function f(){
// do stuff
}
f = function(){
// do stuff
}
但我也可以定义如下函数:
function f(){
// do stuff
}
f = function(){
// do stuff
}
我一直认为它们之间没有区别,但我现在发现这是可行的:
f = function(){
alert('IT WORKS!!');
}
function createCallback(request){
request.done(function(data){
var html = '';
data['result'].forEach(function(bill){
html += "<tr onclick=\"f();\"><td>" + bill.title + "</td></tr>";
});
$("#someId").html(html);
});
}
我点击这一行,它给出了一个ReferenceError:f未定义
所以我想知道:函数f{}和f=函数{}之间的实际区别是什么?当您定义一个函数而不使用var语句时,默认情况下,该函数将被定义为全局范围内的一个属性
引用
将值赋给未声明的变量会隐式地将其创建为全局变量。在执行赋值时,它将成为全局对象的属性。已声明变量和未声明变量之间的差异如下:
声明的变量在声明它们的执行上下文中受到约束。未声明的变量始终是全局变量
声明的变量是在执行任何代码之前创建的。未声明的变量在执行分配给它们的代码之前不存在
声明的变量是其执行上下文函数或全局函数的不可配置属性。未声明的变量是可配置的,例如可以删除
由于这三个差异,未能声明变量很可能会导致意外的结果。因此,建议始终声明变量,无论它们是在函数还是全局范围内。在中,分配给未声明的变量会引发错误
因此,当您使用函数名…{…}语法定义函数时,它将在当前范围内
由于第二个函数定义在全局范围内,tr的onclick可以找到f。尝试像这样使用var语句
var f = function(){
alert('IT WORKS!!');
}
您将得到相同的引用错误:未定义f。当您在不使用var语句的情况下定义函数时,默认情况下,函数将定义为全局范围中的属性
引用
将值赋给未声明的变量会隐式地将其创建为全局变量。在执行赋值时,它将成为全局对象的属性。已声明变量和未声明变量之间的差异如下:
声明的变量在声明它们的执行上下文中受到约束。未声明的变量始终是全局变量
声明的变量是在执行任何代码之前创建的。未声明的变量在执行分配给它们的代码之前不存在
声明的变量是其执行上下文函数或全局函数的不可配置属性。未声明的变量是可配置的,例如可以删除
由于这三个差异,未能声明变量很可能会导致意外的结果。因此,建议始终声明变量,无论它们是在函数还是全局范围内。在中,分配给未声明的变量会引发错误
因此,当您使用函数名…{…}语法定义函数时,它将在当前范围内
由于第二个函数定义在全局范围内,tr的onclick可以找到f。尝试像这样使用var语句
var f = function(){
alert('IT WORKS!!');
}
您将得到相同的引用错误:f未定义。您忘记了var语句。当使用f=函数{}时,函数是全局定义的。这就是为什么它可以从onclick处理程序访问,而另一个则不能
请按照@Nehal的建议阅读。您忘记了var语句。当使用f=函数{}时,函数是全局定义的。这就是为什么它可以从onclick处理程序访问,而另一个则不能
请按照@Nehal的建议阅读。我建议阅读我建议阅读我不明白遗忘是如何描述选择不使用的有效方式。我不明白遗忘是如何描述选择不使用的有效方式。