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 相关文章推荐
Jquery跨域获得Json时invalid label错误的解决办法
Jan 11 Javascript
jquery判断浏览器类型的代码
Nov 05 Javascript
DWZ table的原生分页浅谈
Mar 01 Javascript
微信小程序使用第三方库Immutable.js实例详解
Sep 27 Javascript
C#微信小程序服务端获取用户解密信息实例代码
Mar 10 Javascript
js脚本编写简单刷票投票系统
Jun 27 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
Aug 17 Javascript
express默认日志组件morgan的方法
Apr 05 Javascript
实例分析编写vue组件方法
Feb 12 Javascript
js取0-9随机取4个数不重复的数字代码实例
Mar 27 Javascript
Vue3新特性之在Composition API中使用CSS Modules
Jul 13 Javascript
解决vue 使用axios.all()方法发起多个请求控制台报错的问题
Nov 09 Javascript
为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
smarty中先strip_tags过滤html标签后truncate截取文章运用
2010/10/25 PHP
PHP网站备份程序代码分享
2011/06/10 PHP
PHP使用CURL获取302跳转后的地址实例
2014/05/04 PHP
php+xml实现在线英文词典之添加词条的方法
2015/01/23 PHP
php实现的一个简单json rpc框架实例
2015/03/30 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
2015/07/10 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
2016/06/30 PHP
分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]
2012/10/12 Javascript
js获取RadioButtonList的Value/Text及选中值等信息实现代码
2013/03/05 Javascript
javascript定时变换图片实例代码
2013/03/17 Javascript
解释&&和||在javascript中的另类用法
2014/07/28 Javascript
JavaScript对数字的判断与处理实例分析
2015/02/02 Javascript
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
JavaScript中将数组进行合并的基本方法讲解
2016/03/07 Javascript
基于JavaScript实现 网页切出 网站title变化代码
2016/04/03 Javascript
javaScript语法总结
2016/11/25 Javascript
VUE前端cookie简单操作
2017/10/17 Javascript
简单的React SSR服务器渲染实现
2018/12/11 Javascript
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
Python实现把回车符\r\n转换成\n
2015/04/23 Python
TensorFlow神经网络优化策略学习
2018/03/09 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
python selenium实现发送带附件的邮件代码实例
2019/12/10 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
简单介绍HTML5中audio标签的使用
2015/09/24 HTML / CSS
汇集了世界上最好的天然和有机美容产品:LoveLula
2018/02/05 全球购物
戴森比利时官方网站:Dyson BE
2020/10/03 全球购物
应届生求职简历的自我评价怎么写
2013/10/23 职场文书
机械设计专业应届生求职信
2013/11/21 职场文书
幼师自我鉴定
2014/02/01 职场文书
乡镇镇长个人整改措施
2014/10/01 职场文书
党员批评与自我批评发言稿
2014/10/14 职场文书
汽车修理厂管理制度
2015/08/05 职场文书
公司客户答谢酒会祝酒词
2015/08/11 职场文书
实现AJAX异步调用和局部刷新的基本步骤
2022/03/17 Javascript
python实现学员管理系统(面向对象版)
2022/06/05 Python