博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
匿名函数中undefined形参疑问(转载)
阅读量:5060 次
发布时间:2019-06-12

本文共 1406 字,大约阅读时间需要 4 分钟。

唉,基本功不扎实,昨天在微博上问了个问题,就匿名函数中undefined形参,不知道是干什么用的。

经常看到这样的匿名函数代码:

 

;(function( $, window, document,undefined){
//函数体内具体代码})(jQuery, window,document);

 

一般在很多jQuery插件中可以看到这类的代码。首先说说非常值得提倡的几点:

  1. 代码最前面的分号,可以方式多个文件压缩合并以为其他文件最后一行语句没加分号,而引起合并后的语法错误。
  2. 匿名函数(function(){})();:由于Javascript执行表达式是从圆括号里面到外面,所以可以用圆括号强制执行声明的函数。避免函数体内和外部的变量冲突。
  3. $实参:$是jquery的简写,很多方法和类库也使用$,这里$接受jQuery对象,也是为了避免$变量冲突,保证插件可以正常运行。
  4. window, document实参分别接受window, document对象,window, document对象都是全局环境下的,而在函数体内的window, document其实是局部变量,不是全局的window, document对象。这样做有个好处就是可以提高性能,减少作用域链的查询时间,如果你在函数体内需要多次调用window 或 document对象,这样把window 或 document对象当作参数传进去,这样做是非常有必要的。当然你如果你的插件用不到这两个对象,那么就不用传递这两个参数了。

最后剩下一个undefined形参了,那么这个形参是干什么用的呢,看起来是有点多余。所以去微博上问了一下,感谢各位的解答,帮助,终于搞明白了。

首先看看ECMAScript对undefined的定义:未定义类型仅有一个值,称为 undefined。未必赋值的变量的值即 undefined

可是undefined 并不是js关键字,这样可以用作变量名;比如:

 

function a(){
varundefined=5;alert(undefined)};a();

 

运行一下,至少在IE,弹出来的是5,而不是undefined。也就是说全局的undefined有可能被覆盖。

在一些浏览器输出的undefined,比如高版本的firefox,chrome。看上去有点蛋痛,但这是真的,幸好,ECMAScript 5中undefined会变成只读属性,

: The value properties NaNInfinity, and undefined of the Global Object have been changed to be read-only properties.

这样就很好解释上面的匿名函数为什么要使用undefined这个形参了,因为这个匿名函数使用了$, window, document三个实参,undefined形参是没有任何值传入进来的,那么这里的undefined是真正的undefined,是window的undefined属性。这样写可以避免函数体内的undefined不会被外包重写。

唉,基本功不扎实啊,还是要多学基础知识!基础最重要!

原文地址:,

转载于:https://www.cnblogs.com/yangzaizai/p/3625519.html

你可能感兴趣的文章
Maven启用代理访问
查看>>
Primary definition
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
发送请求时params和data的区别
查看>>
JavaScript 克隆数组
查看>>
eggs
查看>>
一步步学习微软InfoPath2010和SP2010--第七章节--从SP列表和业务数据连接接收数据(4)--外部项目选取器和业务数据连接...
查看>>
如何增强你的SharePoint 团队网站首页
查看>>
FZU 1914 Funny Positive Sequence(线性算法)
查看>>
oracle 报错ORA-12514: TNS:listener does not currently know of service requested in connec
查看>>
基于grunt构建的前端集成开发环境
查看>>
MySQL服务读取参数文件my.cnf的规律研究探索
查看>>
java string(转)
查看>>
__all__有趣的属性
查看>>
BZOJ 5180 [Baltic2016]Cities(斯坦纳树)
查看>>
写博客
查看>>
利用循环播放dataurl的视频来防止锁屏:NoSleep.js
查看>>
python3 生成器与迭代器
查看>>
java编写提升性能的代码
查看>>