;(function( $, window, undefined ){ }(jQuery,window))为何需要往里面传$,window,undefined这些参数

(function( $, jQuery , undefined ) {})(jQuery); 为什么要将window和undefined作为参数传给它?

因为 ecmascript 执行JS代码是从里到外,因此把全局变量window或jQuery对象传进来,就避免了到外层去寻找,提高效率。undefined在老一辈的浏览器是不被支持的,直接使用会报错,js框架要考虑到兼容性,因此增加一个形参undefined。

var undefined = 8;
(function( window ) {
    alert(window.undefined); // 8
    alert(undefined); // 8
})(window);  
var undefined = 8;
(function( window, undefined ) {
    alert(window.undefined);  // 8
    alert(undefined); // 此处undefined参数为局部的名称为undefined变量,值为undefined
})(window);  

区分上述两种方式:第一种每个语句都要去找一次window。第二种将window作为参数传递过去,是的不要每个语句都去找window,应该是提高了效率。 所以后者,就算外面的人把 undefined 定义了,里面的 undefined 依然不受影响。大概是为了最大程度防止外界的变量定义对所做封装的内部造成影响吧。

原文参考自站长网http://www.software8.co/wzjs/Javascript/2525.html

//方式一
(function(undefined ) {
   window.property1 = ……;
   window.property2 = ……;
   ……
})();
//方式二
(function( window, undefined ) {
    ... // code goes here  

})(window);
//方式三
(function(undefined ) {
   var tmp = window;
   tmp.property1 = ……;
   tmp.property2 = ……;
   ……
})();  

方式一的效率明显最低,方式二和方式三应该差不多。将window作为参数传递进去就可以让代码里面的语句可以直接用参数中的window,而不用再去找最外层的对象。假如要在函数中为window再设置 100000个属性,用参数传递过去只需要找一次最外层对象。不用参数传递,用到window的语句都要去找一次最外层对象。

时间: 2024-08-04 21:12:53

;(function( $, window, undefined ){ }(jQuery,window))为何需要往里面传$,window,undefined这些参数的相关文章

jquery插件开发;(function ( $, window, document, undefined ){}(jQuery, window,document)分析

经常看到许多jquery插件是这种形式: ;(function( $, window, document, undefined ){}){ //...code }(jquery,window,document) 一开始自己也是不太清楚,后台查了许多资料博客,基本了解大意,所以总结出来,以供之后查阅更正. 1.自调函数(function(){})() 这是一个自调函数,函数定义后自行调用.将匿名函数放在括号之内,并紧跟一个括号.第二个括号的意思是"立即调用".同时第二个括号也是向匿名函数

细说;(function ($, undefined){ })(jQuery); 的使用

1. 对于function前面的分号(;)的使用:使用分号的目的是为了防止多个文件压缩合并时,以为其他文件最后一行语句没加分号,而引起合并后的语法错误. 2. (function ($, undefined){ })(jQuery)这是一个匿名的函数,一般js库都采用这种自执行的匿名函数来保护内部变量. 3.使用undefined的原因: (1)因为undefined是window的属性,声明为局部变量之后,在函数中如果再有变量与undefined做比较的话,程序就可以不用搜索undefined

window.open实现模式窗口(只弹出一个window.open)

父页面 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>父窗口</title> <script src="../Scri

Uncaught TypeError: Cannot read property &#39;call&#39; of undefined jquery.validate.min.js:28

最近在做表单校验的时候,自己写的addMethod 方法老是不起作用,折腾了接近一天的时间.报的错误如下 Uncaught TypeError: Cannot read property 'call' of undefinedjquery.validate.min.js:28 先来看一下 我自己页面的布局. top.jsp 上面的截图为top.jsp的头部引用的表单校验jquery-1.6.js和jquery.validate.min.js 我来看我自己需要校验的那个页面的jsp布局(stepT

window对象的方法和属性汇总【总结--window对象】

window对象有以下方法: open close alert confirm prompt setTimeout clearTimeout setInterval clearInterval moveBy moveTo resizeBy resizeTo scrollBy scrollTo find back forward home stop print blur focus captureEvent enableExternalCapture disableExternalCapture

jQuery插件之ajaxFileUpload异步上传

介绍 AjaxFileUpload.js 是一个异步上传文件的jQuery插件,原理是创建隐藏的表单和iframe然后用JS去提交,获得返回值. 下载地址: http://files.cnblogs.com/files/kissdodog/ajaxfileupload_JS_File.rar http://zhangzhaoaaa.iteye.com/blog/2123021 属性 语法:$.ajaxFileUpload([options]) url 上传处理程序地址. fileElementI

jQuery form插件的使用--ajaxForm()和ajaxSubmit()的可选参数项对象

一.前提说明 Form Plugin API 里提供了很多有用的方法可以让你轻松的处理表单里的数据和表单的提交过程. 测试环境:部署到Tomcat中的web项目. 二.简单介绍 本文演示的是:jQuery form插件的使用--ajaxForm()和ajaxSubmit()的可选参数项对象 $('#myForm').ajaxForm(function() { $('#output1').html("提交成功!欢迎下次再来!").show(); }); $('#myForm2').sub

jquery validation remote进行唯一性验证时只使用自定义参数,不使用默认参数

在使用validation进行唯一性验证时,想各个模块写一个统一的方法,相统一参数名称,但是remote方法会默认把对应的参数传过去 如: 会把role.roleName默认作为变量提交过去 所以想自定义统一的参数,不想把默认参数传递过去 但是validation插件似乎不支持,只好看源码了 所以,既不影响其原来格式的使用,又能够对其进行扩展自定义参数(若是自定义参数,默认参数就不起作用),就修改了其源码 在页面上使用方式如下: 服务端只需在baseAction里使用: jquery valid

Jquery Uploadify4.2 falsh 实现上传

html: 1 <div id="fileQueue"> 2 <table style="table-layout: fixed; width: 35%"> 3 <tr> 4 <td>@Html.TextBoxFor(ModelItem => Model.SVNSourceCodeURL, new { @type = "hidden", @id = "UploadedFile&quo