定义函数的区别:JavaScript
difference in defining functions : JavaScript
我们在JavaScript 中提到的两个函数声明之间有什么区别吗
//Declaration 1
var foo = function(){
// code goes here
}
和
//Declaration 2
function foo(){
// same code here
}
当我试图使用foo的定义作为类来创建其他对象时
var newObj = new foo();
声明2有效,但宣言1不允许我创建此类型的
这是一个函数表达式:
//Declaration 1
var foo = function(){
// code goes here
}
- 在这种情况下,func表达式是匿名的,但分配给了var foo。供参考
这是一个标记函数:
//Declaration 2
function foo(){
// same code here
}
对var进行表达并没有什么好的理由应该始终尝试为构造函数使用带标签的语句,因此可以通过对象的构造函数来标识对象的"类型"。
人们大多在需要吊装的地方使用这个吊装只是指在定义某个东西之前调用它。
非常简单的例子:
foo(); // alerts 'hello' function foo() {alert('hello');} V/s foo(); // throws an error since foo is undefined var foo = function() {alert('hello');}
首先创建一个局部变量,该变量被分配了一个函数。第二个声明创建了一个功能。在第一种情况下,并没有可用于客户端的函数。这就是为什么不能创建对象。
检查这个小提琴。它允许两种声明:
//Declaration 1
var foo1 = function(){
alert('Declaration 1');
}
//Declaration 2
function foo(){
alert('Declaration 2');
}
var b= new foo1();
var a=new foo();
您可以创建函数的对象。在您的案例中,声明1认为foo是一个变量,因此您不能创建任何变量的对象,这就是为什么声明2有效而声明1不允许您这样做的原因。
第一个函数创建一个匿名(无名称)函数,并将其分配给一个名为foo
的变量。第二个声明了一个名为foo
的函数。通常,这两种形式可以互换使用,但仍有一些区别。以下两个是我想到的主要区别。第一个可能是你所经历的:
吊装
在第二个示例中,完整的函数定义将被提升到当前范围的顶部。所以当你写:
var a = new A();
function A() {}
JavaScript会将其解释为:
function A(){}
var a;
a = new A();
并且您的代码将正常工作。
然而,在第一个示例中,只有变量声明会被提升。功能体保持原样。因此:
var a = new A();
var A = function(){};
将被解释为:
var a, A;
a = new A();
A = function(){};
这将导致错误,因为当您尝试创建实例时,A
仍然未定义。
名称属性
正如我所说,第一个创建了一个匿名函数。这意味着,如果您尝试访问该函数的name
属性,它将返回一个空字符串:
var A = function(){};
console.log(A.name) //{empty string}
在第二个示例中,函数的实际名称为A
:
function A(){}
console.log(A.name) //A
相关文章:
- JavaScript中的函数和对象之间没有区别吗?
- javascript函数的:和=之间的区别
- 这两个关于 JavaScript 作用域链的例子有什么区别?
- Math.min()和Math.max()之间有什么区别?在Javascript中
- 使用Rhino和ASE执行Javascript的区别
- Javascript 类型未定义和 void 之间的区别
- Javascript-defineProperty和直接在对象上定义函数之间的区别
- 布局引擎和javascript引擎之间的区别
- 以下两者在javascript中有什么区别
- type=text/javascript和language=javascript之间的区别
- JavaScript中let和var之间的区别
- JavaScript 中的符号传播右移和零填充右移之间的区别
- 在Javascript语法中:和::和:::有什么区别
- JavaScript承诺的定义以及与事件的区别
- 什么's使用链接和脚本标记引用JavaScript源之间的区别
- 在javascript中,在变量名之前使用var有什么区别/优势吗
- javascript getTime()和Java getTime(()之间的区别
- JavaScript:Date 的 toString() 和 toLocaleString() 方法之间的区别
- onChange 和 onSubmit 之间的 JavaScript 区别
- 函数和新函数之间的JavaScript区别