if (true) {
function foo() {
return 'first';
}
}
else {
function foo() {
return 'second';
}
}
foo();
if true
def foo
return 'first'
end
else
def foo
return 'second'
end
end
foo
还是 ruby 的比较好理解...
'second'
吧? 还是浏览器相关?
function foo()
这个声明是不受程序流或者控制流影响的, 甚至可以先用后声明...
foo();
function foo() {
alert('second')
}
坚持 var foo = function(){ ... }
结果就容易预测一点, coffeescript 就总是用 var
+ 匿名函数的方式
声明提升。跟变量声明一样。另外函数声明和变量声明这俩同时出现也会有化学反应的
function a() {}
var a;
function b() {}
var b = 1;
JavaScript 的 function,变量,好像是在无论在哪定义,都是可以找到的。后面那个会把前面的覆盖掉。而且 JavaScript 是 function scope,if,for 什么的没有增加一个 scope(java 就不是)。
顺便一提
}
else {
这个似乎有的浏览器会在第一个"}"后面自动加上";" 不太确定,好久没碰 JavaScript 了。。。
强烈不建议这种写法,Javascipt 中有个函数声明提升机制,如果是声明式函数这种写法在不同浏览器中会出现不同的状态,如果你非得这么些的话还是用函数表达式,例如:
if(true){
var fn = function (){};
}else{
var fn = function (){}
}
其实我有时会利用这种机制 有意把比较主要的调用部分代码写前面 实现细节写后面 JS 做这个容易很多 但是平心而论 确实喜欢 Ruby 的声明方法 只有这种方法是 make sense 的