您好,匿名用户

js中()的作用

0 投票

问题描述

a = (function foo1(){})
function foo2(){}

为什么执行完后,输入foo1是undefined,()的作用是立即执行,难道foo1是声明在局部作用域

用户头像 提问 5月29日 @ Udyr 中士 (1,446 威望)
分享到:

1个回答

0 投票
 
最佳答案
  1. 首先,()操作符有两种用法,一是作为圆括号运算符,提升括号内表达式的优先级;二是作为函数调用操作符,用于执行在()操作符之前指向的函数名
  2. 其次,函数有函数声明和函数表达式两种声明形式,前者形如:

    function name([param,[, param,[..., param]]]) {
       [statements]
    }

    而函数表达式则是:

    let function_expression = function [name]([param1[, param2[, ..., paramN]]]) {
       statements
    };

    在函数表达式中,前边的 function_expression 如果存在,这就是个具名函数表达式;而反之则是匿名函数表达式。表达式里的 name 加的是方括号,表示可选:因为这个函数声明是被“禁锢”在 function_expression 变量里的,换句话说,它可以用function_expression()这种形式来调用(所以有没有名字其实无所谓了,因为函数名外部不可见)。

  3. 再说匿名函数表达式。
    匿名函数表达式,形如:

    function ([param,[, param,[..., param]]]) {
       [statements]
    }

    说白了就是函数声明不留名。做好事不留名可以,做函数不留名,...那怎么调动?所以这种形式单独存在的话,不合法。所以要怎么办?这时就出现了 IIFE,也就是立即调用函数表达式/自执行函数表达式。它的根本思想很简单,先用圆括号操作符把表达式本体罩住,表示“我罩你”,再在末尾加个函数调用操作符,表示“放胆做”,这俩加一块,就是“立即执行”:

    (function ([param,[, param,[..., param]]]) {
       [statements]
    })()

    (当然还有几种其它形式的,但先学标准的吧)

  4. 这些 balabala 的都看下来,你的问题也应该能有个解释了。(另外结下稿费,谢谢......
  5. 参考资料:

用户头像 回复 5月29日 @ 爹妈罩我去战斗 上士 (1,676 威望)
选中 5月16日 @Udyr
提一个问题:

相关问题

0 投票
1 回复 23 阅读
用户头像 提问 5月29日 @ Draven 中士 (1,340 威望)
0 投票
1 回复 17 阅读
用户头像 提问 5月15日 @ Jayce 中士 (1,281 威望)
0 投票
1 回复 112 阅读
用户头像 提问 2017年 6月5日 @ Karthus 中士 (1,242 威望)
0 投票
1 回复 319 阅读
用户头像 提问 2014年 11月1日 @ 苏尐沫 中士 (1,242 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

IT技术交流群 - 随意问
欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...