扫码关注官方订阅号
平时使用匿名函数时这种用法比较多见: (function(){return "ok"})() 因为直接使用这样的代码 function(){return "ok"}() "()"先计算是会报错的, 但是也会看到这样的写法也是可行的: (function(){return "ok"}()) 这样又如何解释呢?
我的理解是这个括号建立了一个新的作用域。(function(){return "ok"}())中的匿名函数已经不再是定义全局作用域定义的函数了。你可以用(fOk = function(){return "ok"}());fOk();来验证。但是函数的定义加载是优先于其调用的。但是在匿名函数中()运算符优先级更高,所以直接function(){//..}()会报错。但是用()将这段代码的作用于降级之后就可以了,应该因为这时函数调用运算符()执行前匿名函数就已经定义过了
@Jason gao(function(){return "ok"}())外面的括号只是强制运算而已,并不涉及作用域。 可以使用其他的运算符,强制运算:void function(){return "ok"}()+ function(){return "ok"}()- function(){return "ok"}()1* function(){return "ok"}()1 & function(){return "ok"}()
(function(){return "ok"}())
void function(){return "ok"}()
+ function(){return "ok"}()
- function(){return "ok"}()
1* function(){return "ok"}()
1 & function(){return "ok"}()
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
扫描下载App
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
我的理解是这个括号建立了一个新的作用域。(function(){return "ok"}())中的匿名函数已经不再是定义全局作用域定义的函数了。你可以用(fOk = function(){return "ok"}());fOk();来验证。但是函数的定义加载是优先于其调用的。但是在匿名函数中()运算符优先级更高,所以直接function(){//..}()会报错。但是用()将这段代码的作用于降级之后就可以了,应该因为这时函数调用运算符()执行前匿名函数就已经定义过了
@Jason gao
(function(){return "ok"}())
外面的括号只是强制运算而已,并不涉及作用域。可以使用其他的运算符,强制运算:
void function(){return "ok"}()
+ function(){return "ok"}()
- function(){return "ok"}()
1* function(){return "ok"}()
1 & function(){return "ok"}()