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 相关文章推荐
谷歌浏览器 insertCell与appendChild的区别
Feb 12 Javascript
避免 showModalDialog 弹出新窗体的原因分析
May 31 Javascript
jQuery分页插件jquery.pagination.js使用方法解析
Feb 09 Javascript
js实现省份下拉菜单效果
Feb 15 Javascript
详解vue组件通信的三种方式
Jun 30 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
Oct 31 Javascript
完美解决手机网页中输入框被输入法遮挡的问题
Dec 19 Javascript
在vue项目中正确使用iconfont的方法
Sep 28 Javascript
详解ESLint在Vue中的使用小结
Oct 15 Javascript
记一次Vue.js混入mixin的使用(分权限管理页面)
Apr 17 Javascript
基于webpack4+vue-cli3项目实现换肤功能
Jul 17 Javascript
Vue toFixed保留两位小数的3种方式
Oct 23 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
php在线生成ico文件的代码
2007/10/09 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
2012/07/20 PHP
6种php上传图片重命名的方法实例
2013/11/04 PHP
php验证码实现代码(3种)
2015/09/07 PHP
ExtJS下书写动态生成的xml(兼容火狐)
2013/04/02 Javascript
jQuery之ajax删除详解
2014/02/27 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
ztree获取当前选中节点子节点id集合的方法
2015/02/12 Javascript
javascript页面倒计时实例
2015/07/25 Javascript
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
Node.js Sequelize如何实现数据库的读写分离
2016/10/23 Javascript
jsonp跨域请求实现示例
2017/03/13 Javascript
Vue的MVVM实现方法
2017/08/16 Javascript
JavaScript实现的简单Tab点击切换功能示例
2018/07/06 Javascript
详解vue axios用post提交的数据格式
2018/08/07 Javascript
详解Vue CLI3配置之filenameHashing使用和源码设计使用和源码设计
2018/08/31 Javascript
vue-cli项目配置多环境的详细操作过程
2018/10/30 Javascript
微信小程序自定义弹窗实现详解(可通用)
2019/07/04 Javascript
Vue中keep-alive组件作用详解
2020/02/04 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
[01:15:15]VG VS EG Supermajor小组赛B组胜者组第一轮 BO3第二场 6.2
2018/06/03 DOTA
Python操作redis实例小结【String、Hash、List、Set等】
2019/05/16 Python
Python 词典(Dict) 加载与保存示例
2019/12/06 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
2020/01/03 Python
python脚本监控logstash进程并邮件告警实例
2020/04/28 Python
凯特王妃父母建立的派对用品网站:Party Pieces
2017/05/28 全球购物
Omio美国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/08 全球购物
Hotels.com印度:酒店预订
2019/05/11 全球购物
新西兰Bookabach:查找全球度假屋
2020/12/03 全球购物
物业管理求职自荐信
2013/09/25 职场文书
新闻编辑自荐信
2013/11/03 职场文书
假期安全教育广播稿
2014/10/04 职场文书
团队会宣传标语
2014/10/09 职场文书
公安机关纪律作风整顿个人剖析材料材料
2014/10/10 职场文书
SQL Server——索引+基于单表的数据插入与简单查询【1】
2021/04/05 SQL Server
bat批处理之字符串操作的实现
2022/03/16 Python