• (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

  • 相关阅读:
    maven:读取程序版本号的三种方案
    有无目标的人生差10倍!赶紧和娃把新年计划做起来
    都怎么了,其实早就知道,但是一直没有找到答案……
    python添加tab键功能
    电影观后感
    ipset批量配置iptables
    Oracle 触发器,事物
    Oracle PL/SQL高级应用 视图 同义词 序列
    Oracle PL/SQL高级应用 存储过程
    Oracle PL/SQL高级应用 游标
  • 原文地址:https://www.cnblogs.com/codebook/p/10458510.html
Copyright © 2020-2023  润新知