Javascript 声明函数的方法
可能重复:Javascript 声明函数的方法,javascript,function,declaration,Javascript,Function,Declaration,可能重复: 这两种功能之间有什么区别 function a() { b=2; alert(b); } a(); 这个函数呢 var a=function() { b=2 alert(b); } a(); 主要区别是什么主要区别是在声明函数时: function a(){ // something... } 甚至在代码中声明它的位置之前,它就可以在同一范围内访问 但当您将匿名函数指定给变量时: var a = function(){ //
这两种功能之间有什么区别
function a()
{
b=2;
alert(b);
}
a();
这个函数呢
var a=function()
{
b=2
alert(b);
}
a();
主要区别是什么主要区别是在声明函数时:
function a(){
// something...
}
甚至在代码中声明它的位置之前,它就可以在同一范围内访问
但当您将匿名函数指定给变量时:
var a = function(){
// something...
};
在分配之前不可用
创建函数时
它是函数实际创建时间的结果。在第一种情况下,它是在编译代码时创建的,而在第二种情况下,函数是在解释器到达赋值行时创建的
测试代码
通过执行以下代码(),您可以看到我上面提到的差异:
您将看到(如中所示),即使在实际声明之前,
a()
函数也被正确调用,但是b()
在赋值之前不可用。主要区别在于声明函数时:
function a(){
// something...
}
甚至在代码中声明它的位置之前,它就可以在同一范围内访问
但当您将匿名函数指定给变量时:
var a = function(){
// something...
};
在分配之前不可用
创建函数时
它是函数实际创建时间的结果。在第一种情况下,它是在编译代码时创建的,而在第二种情况下,函数是在解释器到达赋值行时创建的
测试代码
通过执行以下代码(),您可以看到我上面提到的差异:
您将看到(如中所示),即使在实际声明之前,
a()
函数也被正确调用,但是b()
在赋值之前不可用。唯一的真正区别是第二个函数没有名称,而函数a(){}
一个被提升。唯一真正的区别是第二个函数没有名字,而函数a(){}
一个被提升。区别在于函数a()是在脚本块的解析时定义的,而var a=函数()是在运行时定义的
<script type="text/javascript">
// No errors occured;
function a();
function a(){
console.log("Success");
}
</script>
<script type="text/javascript">
// An error will occured;
a();
var a = function (){
console.log("Success");
}
</script>
//没有发生错误;
函数a();
函数a(){
控制台日志(“成功”);
}
//将发生错误;
a();
var a=函数(){
控制台日志(“成功”);
}
不同之处在于,函数a()是在脚本块的解析时定义的,而var a=function()是在运行时定义的
<script type="text/javascript">
// No errors occured;
function a();
function a(){
console.log("Success");
}
</script>
<script type="text/javascript">
// An error will occured;
a();
var a = function (){
console.log("Success");
}
</script>
//没有发生错误;
函数a();
函数a(){
控制台日志(“成功”);
}
//将发生错误;
a();
var a=函数(){
控制台日志(“成功”);
}
它们都是在运行时定义的……是的,我知道您的答案反映了链接问题中投票率较高的答案,但在这方面,该答案是错误的。它们都是在运行时定义的……是的,我知道您的答案反映了链接问题中投票率较高的答案,但这个答案在这方面是错误的。这就是所有的区别吗?那么,我为什么要使用第二个例子呢?我认为要么这可以被视为所有差异,要么其他差异可以被视为这一差异的结果。一般来说,没有理由说一个优于另一个——这完全取决于您需要它做什么,具体的用例。在第二种情况下,您将能够对其进行操作,就像它只是一个变量一样,在第一种情况下定义、删除它的位置等等。这真的取决于你想在哪里以及如何使用它。这就是所有的区别吗?那么,我为什么要使用第二个例子呢?我认为要么这可以被视为所有差异,要么其他差异可以被视为这一差异的结果。一般来说,没有理由说一个优于另一个——这完全取决于您需要它做什么,具体的用例。在第二种情况下,您将能够对其进行操作,就像它只是一个变量一样,在第一种情况下定义、删除它的位置等等。这实际上取决于您希望在何处以及如何使用它。请注意,还有属性访问器的概念,它们是getter和setter函数:它们在“函数”之前使用特殊关键字get
和set
name,它实际上是已处理访问的属性的名称。请注意,还有属性访问器的概念,即getter和setter函数:它们在“函数”名称之前使用特殊关键字get
和set
,而“函数”名称实际上是已处理访问的属性的名称。