在下面的例子中,为什么`var a = function(){}`类似于`function a(){}`?

时间:2015-07-29 23:32:36

标签: javascript

我不理解本OP的一部分答案:

Javascript function scoping and hoisting

作家说:

"

此外,在这个例子中,

var a = function () {};

表现与

相同
{{1}}

"

我所知道的是,函数表达式与函数声明不同,至少对于提升而言。在这种情况下,为什么它们相似?

2 个答案:

答案 0 :(得分:1)

区别在于第一行是在运行时定义的,而第二行是在脚本块的分析时定义的。

在堆栈上查看完整的答案,在这里:var functionName = function() {} vs function functionName() {}

答案 1 :(得分:1)

  

为什么他们在这种情况下相似?

由于var已悬挂(但未设置),因此函数声明会被挂起,这意味着a中存在a = 10;评估a之前的本地范围,因此全局a永远不会被修改 - 标识符查找首先找到本地var a = 1; function b() { a = 10; return; function a() {} } b(); alert(a); 所以设置

其他问题的相关部分

a === 1
  

为什么b

答案是试图说function b() { function a() {} a = 10; return; } 等于

function b() {
    var a = function () {};
    a = 10;
    return;
}

相似
a

即。在b中定义了标识符function b() { var a = 10; return; } ,所以

a

现在,显然,b

不会修改全局var

请注意function b() { a = 10; return; var a; } 的位置并不重要,只是它在那里,以下会产生相同的行为

PathProperties pathProperties =
        PathProperties.parse("(id,status,name,shippingAddress(id,line1,city),billingAddress(*),contacts(*))");

List<Customer> customers = Ebean.find(Customer.class)
    .apply(pathProperties)
    .findList();

String jsonString = Ebean.json().toJson(customers, pathProperties);