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

  • 相关阅读:
    ajax翻页效果模仿yii框架
    一个伪ajax图片上传代码的例子
    php下intval()和(int)转换有哪些区别
    php中iconv函数使用方法
    php字符串截取问题
    ASP.net UrlRewrite的防盗链功能
    ASP.NET中application对象
    javascript回车完美实现tab切换功能
    有关c#装箱和拆箱知识整理
    PHP四大安全策略
  • 原文地址:https://www.cnblogs.com/codebook/p/10458510.html
Copyright © 2011-2022 走看看