js当一个变量为函数时 应该注意的一点细节小结


Posted in Javascript onDecember 29, 2011

先看一段简单的代码:

var testFun=function (name,age){ 
var job='Flash Develop'; 
return new testFun.init(name,age,job); 
} 
testFun.init=function(name,age,job){ 
return 'name:'+name+',age:'+age+',job:'+job+''; 
} 
alert(testFun('vincent',30)); //[object Object]

代码很简单,变量testFun为一个匿名函数,匿名函数返回的一个testFun.init对象(也是一个匿名函数)。但对于一些新手有时会误解为:testFun是返回的一个testFun.init对象。他可能会这样想,在匿名函数function(name,age)构建过程中,又用到了testFun. 此时testFun还在构建中,应该还没有存在,testFun.init更没有存在,怎么就可以用testFun.init呢?

其实这样想是存在了一个误区:把testFun与testFun()等同起来了,如果testFun是返回的一个testFun.init对象,代码应该是testFun=function(name,age){… …}()。正确的理解应该是这样的,testFun只是一个函数,当你把一个函数赋于它时,它就已经存在了,哪怕函数返回的是undefined或null,它本身仍然是Function,只有testFun()执行后返回值才是undefined或null。返回值是testFun()执行的结果,结果返回后,就不再与testFun有任何关系。如:

var testFun=function(){ 
return undefined; 
} 
var result=testFun(); 
alert(testFun); // function () {return undefined;} 
alert(result); // undefined result与testFun不再有任何关系

所以,当赋于testFun一个匿名函数后,它就一直存在着,直到赋于它另外一个值。对于testFun.init你可以这样简单的去理解:
testFun.init=function(name,age){}.init=function(name,age.job){… …}
综上所述,回头再看testFun是一个函数,而testFun()则是(function(name,age,job){return 'name:'+name+',age:'+age+',job:'+job+''; })()
为了便于理解,可以把代码精简为:
var testFun=function(){} 
testFun.init=function(){}

只是testFun()没有返回一个testFun.init对象罢了。
Javascript 相关文章推荐
js选取多个或单个元素的实现代码(用class)
Aug 22 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
Apr 15 Javascript
jquery+php随机生成红包金额数量代码分享
Aug 27 Javascript
判断数组的最佳方法(推荐)
Oct 11 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
Dec 08 Javascript
js实现拖拽功能
Mar 01 Javascript
vue2.0模拟锚点的实例
Mar 14 Javascript
微信小程序实现底部导航
Nov 05 Javascript
js设置默认时间跨度过程详解
Jul 17 Javascript
vue集成chart.js的实现方法
Aug 20 Javascript
JavaScript创建、读取和删除cookie
Sep 03 Javascript
vue-cropper插件实现图片截取上传组件封装
May 27 Vue.js
为JavaScript类型增加方法的实现代码(增加功能)
Dec 29 #Javascript
javaScript 利用闭包模拟对象的私有属性
Dec 29 #Javascript
Jquery中删除元素的实现代码
Dec 29 #Javascript
js的表单操作 简单计算器
Dec 29 #Javascript
javascript写的简单的计算器,内容很多,方法实用,推荐
Dec 29 #Javascript
JavaScript中两个感叹号的作用说明
Dec 28 #Javascript
javascript (用setTimeout而非setInterval)
Dec 28 #Javascript
You might like
session在PHP大型web应用中的使用
2011/06/25 PHP
一组PHP可逆加密解密算法实例代码
2014/01/21 PHP
PHP curl 抓取AJAX异步内容示例
2014/09/09 PHP
PHP实现将标点符号正则替换为空格的方法
2017/08/09 PHP
php数组遍历类与用法示例
2019/05/24 PHP
JavaScript高级程序设计 错误处理与调试学习笔记
2011/09/10 Javascript
javascript插入样式实现代码
2012/02/22 Javascript
JavaScript及jquey实现多个数组的合并操作
2014/09/06 Javascript
JavaScript学习笔记之Function对象
2015/01/22 Javascript
javascript控制层显示或隐藏的方法
2015/07/22 Javascript
深入学习Bootstrap表单
2016/12/13 Javascript
微信小程序CSS3动画下拉菜单效果
2018/11/04 Javascript
微信小程序登录按钮遮罩浮层效果的实现方法
2018/12/16 Javascript
vue项目前端埋点的实现
2019/03/06 Javascript
vue路由插件之vue-route
2019/06/13 Javascript
VUE实现自身整体组件销毁的示例代码
2020/01/13 Javascript
js用正则表达式筛选年月日的实例方法
2021/01/04 Javascript
[43:57]Liquid vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
[37:29]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.19
2020/11/19 DOTA
IntelliJ IDEA安装运行python插件方法
2018/12/10 Python
将tensorflow模型打包成PB文件及PB文件读取方式
2020/01/23 Python
浅谈python 中的 type(), dtype(), astype()的区别
2020/04/09 Python
Python Django form 组件动态从数据库取choices数据实例
2020/05/19 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
linux mint中搜狗输入法导致pycharm卡死的问题
2020/10/28 Python
Django model class Meta原理解析
2020/11/14 Python
python与idea的集成的实现
2020/11/20 Python
python3判断IP地址的方法
2021/03/04 Python
印度尼西亚最大的电商平台:Tokopedia(印尼版淘宝)
2017/12/02 全球购物
法学专业毕业生自荐信范文
2013/12/18 职场文书
干部行政关系介绍信
2014/01/17 职场文书
小学红领巾广播稿(3篇)
2014/09/13 职场文书
2014年建筑工程工作总结
2014/12/03 职场文书
写给女朋友的检讨书
2015/05/06 职场文书
《鲁班学艺》读后感3篇
2019/11/27 职场文书
Python提取PDF指定内容并生成新文件
2021/06/09 Python