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代码
Dec 15 Javascript
String.prototype实现的一些javascript函数介绍
Nov 22 Javascript
Jquery实现自定义窗口随意的拖拽
Mar 12 Javascript
jQuery对象和DOM对象之间相互转换的方法介绍
Feb 28 Javascript
详解Python中logging日志模块在多进程环境下的使用
Dec 26 Javascript
JS表单数据验证的正则表达式(常用)
Feb 18 Javascript
Angularjs 实现动态添加控件功能
May 25 Javascript
Vue实现路由跳转和嵌套
Jun 20 Javascript
Javascript之图片的延迟加载的实例详解
Jul 24 Javascript
bootstrap table服务端实现分页效果
Aug 10 Javascript
Vue 3.0双向绑定原理的实现方法
Oct 23 Javascript
Element实现动态表格的示例代码
Aug 02 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读取IMAP邮件
2006/10/09 PHP
PHP读取mssql json数据中文乱码的解决办法
2016/04/11 PHP
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
地址栏上的一段语句,改变页面的风格。(教程)
2008/04/02 Javascript
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
javascript 图片裁剪技巧解读
2012/11/15 Javascript
js操作label给label赋值及取label的值示例
2013/11/07 Javascript
详解Vue 动态添加模板的几种方法
2017/04/25 Javascript
详解react服务端渲染(同构)的方法
2017/09/21 Javascript
利用vue开发一个所谓的数独方法实例
2017/12/21 Javascript
JavaScript实现美化滑块效果
2019/05/17 Javascript
微信小程序实现订单倒计时
2020/11/01 Javascript
微信小程序可滑动周日历组件使用详解
2019/10/21 Javascript
vue-resource:jsonp请求百度搜索的接口示例
2019/11/09 Javascript
Python版实现微信公众号扫码登陆
2020/05/28 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
Python中动态获取对象的属性和方法的教程
2015/04/09 Python
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
python3.0 模拟用户登录,三次错误锁定的实例
2017/11/02 Python
Python语言描述最大连续子序列和
2017/12/05 Python
Python 创建空的list,以及append用法讲解
2018/05/04 Python
django使用F方法更新一个对象多个对象字段的实现
2020/03/28 Python
python 19个值得学习的编程技巧
2020/08/15 Python
详解BeautifulSoup获取特定标签下内容的方法
2020/12/07 Python
pycharm实现猜数游戏
2020/12/07 Python
opencv实现图像平移效果
2021/03/24 Python
专科应届生求职信
2013/11/24 职场文书
实习生单位鉴定意见
2013/12/04 职场文书
大学自我鉴定
2013/12/20 职场文书
2014婚礼司仪主持词
2014/03/14 职场文书
医生辞职信范文
2015/03/02 职场文书
让子弹飞观后感
2015/06/11 职场文书
高中历史教学反思
2016/02/19 职场文书
Django数据库(SQlite)基本入门使用教程
2022/07/07 Python