Gra*_*hao 78 javascript jslint function-declaration coffeescript
我注意到在CoffeeScript中,如果我使用以下方法定义函数:
a = (c) -> c=1
Run Code Online (Sandbox Code Playgroud)
我只能得到函数表达式:
var a;
a = function(c) {
return c = 1;
};
Run Code Online (Sandbox Code Playgroud)
但是,我个人经常使用函数声明,例如:
function a(c) {
return c = 1;
}
Run Code Online (Sandbox Code Playgroud)
我确实使用了第一种形式,但我想知道CoffeeScript中是否有一种生成函数声明的方法.如果没有这种方式,我想知道为什么CoffeeScript会避免这样做.我不认为JSLint会声明声明的错误,只要函数声明在作用域的顶部.
Tre*_*ham 60
CoffeeScript在一个地方使用函数声明(又名"命名函数"):class定义.例如,
class Foo
Run Code Online (Sandbox Code Playgroud)
编译成
var Foo;
Foo = (function() {
function Foo() {}
return Foo;
})();
Run Code Online (Sandbox Code Playgroud)
根据FAQ,CoffeeScript不在其他地方使用函数声明的原因:
归咎于微软这个.最初,每个可以为其检索合理名称的函数都被赋予一个,但是IE 8及更低版本具有范围问题,其中命名函数被视为声明和表达式.有关更多信息,请参阅此
简而言之:不小心使用函数声明会导致IE(pre-9)和其他JS环境之间出现不一致,因此CoffeeScript会避开它们.
Zai*_*ani 12
是的你可以:
hello()
`function hello() {`
console.log 'hello'
dothings()
`}`
Run Code Online (Sandbox Code Playgroud)
你通过反引号逃脱纯JS
请注意,您不能在函数体上缩进.
干杯
使用CoffeeScript时要记住的一件事是,您可以随时回到JavaScript.虽然CoffeeScript不支持命名函数声明,但您始终可以回退到JavaScript来执行此操作.
http://jsbin.com/iSUFazA/11/edit
# http://jsbin.com/iSUFazA/11/edit
# You cannot call a variable function prior to declaring it!
# alert csAddNumbers(2,3) # bad!
# CoffeeScript function
csAddNumbers = (x,y) -> x+y
# You can call a named function prior to
# delcaring it
alert "Calling jsMultiplyNumbers: " + jsMultiplyNumbers(2,3) # ok!
# JavaScript named function
# Backticks FTW!
`function jsMultiplyNumbers(x,y) { return x * y; }`
Run Code Online (Sandbox Code Playgroud)
您还可以在CoffeeScript中编写一个大胖函数,然后使用反引号技巧让JavaScript调用另一个函数:
# Coffeescript big function
csSomeBigFunction = (x,y) ->
z = x + y
z = z * x * y
# do other stuff
# keep doing other stuff
# Javascript named function wrapper
`function jsSomeBigFunction(x,y) { return csSomeBigFunction(x,y); }`
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37120 次 |
| 最近记录: |