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