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 相关文章推荐
javascript知识点收藏
Feb 22 Javascript
jQuery Study Notes学习笔记 (二)
Aug 04 Javascript
javascript 应用小技巧方法汇总
Jul 05 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
Sep 23 Javascript
APP中javascript+css3实现下拉刷新效果
Jan 27 Javascript
JavaScript中的Reflect对象详解(ES6新特性)
Jul 22 Javascript
AngularJS表格详解及示例代码
Aug 17 Javascript
JavaScript 事件对内存和性能的影响
Jan 22 Javascript
webpack项目轻松混用css module的方法
Jun 12 Javascript
原生JS实现动态添加新元素、删除元素方法
May 05 Javascript
vue 避免变量赋值后双向绑定的操作
Nov 07 Javascript
jquery插件实现图片悬浮
Apr 16 jQuery
为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
php下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
php代码书写习惯优化小结
2013/06/20 PHP
web server使用php生成web页面的三种方法总结
2013/10/28 PHP
详解Laravel视图间共享数据与视图Composer
2016/08/04 PHP
详解php中serialize()和unserialize()函数
2017/07/08 PHP
php写入mysql中文乱码的实例解决方法
2019/09/17 PHP
【消息提示组件】,兼容IE6/7&&FF2
2007/09/04 Javascript
IE浏览器兼容Firefox的JS脚本的代码
2008/10/23 Javascript
再谈javascript图片预加载技术(详细演示)
2011/03/12 Javascript
将input file的选择的文件清空的两种解决方案
2013/10/21 Javascript
nodejs爬虫抓取数据之编码问题
2015/07/03 NodeJs
javascript 继承学习心得总结
2016/03/17 Javascript
聊聊那些使用前端Javascript实现的机器学习类库
2017/09/18 Javascript
jquery动态添加带有样式的HTML标签元素方法
2018/02/24 jQuery
VUE v-for循环中每个item节点动态绑定不同函数的实例
2018/09/26 Javascript
vue代码分割的实现(codesplit)
2018/11/13 Javascript
Vue实现Header渐隐渐现效果的实例代码
2020/11/05 Javascript
[52:37]完美世界DOTA2联赛循环赛 Forest vs DM BO2第一场 10.29
2020/10/29 DOTA
python根据路径导入模块的方法
2014/09/30 Python
python写入中英文字符串到文件的方法
2015/05/06 Python
python语言使用技巧分享
2016/05/31 Python
python如何为被装饰的函数保留元数据
2018/03/21 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
2019/08/02 Python
python 变量初始化空列表的例子
2019/11/28 Python
python列表的逆序遍历实现
2020/04/20 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
基于Python采集爬取微信公众号历史数据
2020/11/27 Python
美国网上书店:Barnes & Noble
2018/08/15 全球购物
商务助理求职信范文
2014/04/20 职场文书
师德演讲稿范文
2014/05/06 职场文书
企业消防安全责任书
2014/07/23 职场文书
党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2014年实习期工作总结
2014/11/27 职场文书
销售开票员岗位职责
2015/04/15 职场文书
详解MySQL事务的隔离级别与MVCC
2021/04/22 MySQL
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers