zoukankan      html  css  js  c++  java
  • function前加运算符实现立即执行函数

    我们知道函数的调用方式通常是FunctionName()

    但如果我们尝试为一个“定义函数”末尾加上(),解析器是无法理解的。

    function msg(){
      alert('message');
    }();//解析器是无法理解的
    

    定义函数的调用方式应该是 msg()。

    想让函数立即执行可以将函数体部分用()包裹起来。

    这是因为,使用括号包裹定义函数体,解析器将会以函数表达式的方式去调用定义函数。也就是说,任何能将函数变成一个函数表达式的作法,都可以使解析器正确的调用定义函数。如下:

    // 这么写会报错,因为这是一个函数定义:
    function() {}()
    
    // 常见的(多了一对括号),调用匿名函数:
    (function() {})()
    
    // 但在前面加上一个布尔运算符(只多了一个感叹号),就是表达式了,将执行后面的代码,也就合法实现调用
    !function() {}()
    

    ! 只是其中一个运算符,而 + - || ~都有这样的功能。

    用 ! 可能更多的是一个习惯问题,不同的运算符,性能是不同的。

    效果等同于以下常用的两种立即执行方式:

    (function() {})();  
    // or  
    (function() {}()); 
    

    谢谢大家的阅读。

  • 相关阅读:
    hdu 2203 亲和串
    hdu 3999 The order of a Tree
    poj 2299 Ultra-QuickSort
    hdu 1908 Double Queue
    hdu 1556 Color the ball
    hdu 4288 Coder
    hdu 5265 pog loves szh II
    hdu 5058 So easy
    T103763 【模板】矩阵乘法
    T103492 【模板】点双连通分量
  • 原文地址:https://www.cnblogs.com/macq/p/6525165.html
Copyright © 2011-2022 走看看