zoukankan      html  css  js  c++  java
  • (function (window, document, undefined) {})(window, document)什么意思?

    1.IIFE(即时调用的函数表达式),它采取以下表达式:

    (function (window, document, undefined) {
      // 
    })(window, document);

    JavaScript具有函数作用域,因此可以创建一些需要的“私有范围”。

    “IIFE”之所以被创造出来是因为它们是直接调用的函数表达式。

    这意味着它们在运行时被立即调用,我们也不能再调用它们了,它们只运行一次。

    (function (window) {
      
    })(window);

    (window); 是调用函数的地方,我们通过window对象,然后这个函数被传递到函数中,我也把它命名为window。

    你可以认为这是毫无意义的,因为我们应该给它命名不同的东西,但是现在我们也将使用window。

    我们还能把所有的东西都传过去:

    (function (window, document) {
      // 我们通常需要 window 和 document 
    })(window, document);

    2.那么undefined是啥??

    在ECMAScript 3中,undefined是可变的,这意味着它的值可以被重新赋值,比如undefined = true;

    幸运的是,在 ECMAScript 5 中的 ('use strict';)语法将会抛出一个错误。

    于是我们可以通过传入undefined来保护自己的 IIFE,也就是说如果有人来给undefined赋值了,也不会有问题:

    undefined = true;
    (function (window, document, undefined) {
      // undefined 是一个局部未定义的变量
    })(window, document);

    缩小局部变量是IIFE模式的神奇之处,传入局部变量名可以随意的命名:

    (function (window, document, undefined) {
      console.log(window); // Object window
    })(window, document);
    // 这两个功能是一样的
    (function (a, b, c) {
      console.log(a); // Object window
    })(window, document);

    也可以将jquery引进来:

    (function ($, window, document, undefined) {
      // use $ to refer to jQuery
      // $(document).addClass('test');
    })(jQuery, window, document);
    
    (function (a, b, c, d) {
      // becomes
      // a(c).addClass('test');
    })(jQuery, window, document);

    这也意味着你不需要调用jQuery.noConflict();或者其他任何东西来替代$。

    备注:

    What (function (window, document, undefined) {})(window, document); really means

  • 相关阅读:
    node.js fs,http
    node.js global object,util and so on
    node.js second day
    node.js
    mysql 多个and的简写
    mysql 返回结果按照指定的id顺序返回
    php file_get_contents fopen 连接远程文件
    软考例题1
    Skyline中使用AxTE3DWindowEx打开新的一个球体
    使用AE进行点的坐标投影变换
  • 原文地址:https://www.cnblogs.com/codebook/p/10458510.html
Copyright © 2011-2022 走看看