JavaScript-javascript三种创建函数方法的区别
众所周知
javascript一般有三种方法来创建一个函数来说说对这三种方式的看法吧
代码一:
function t(x){
return x*x;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
众所周知
javascript一般有三种方法来创建一个函数来说说对这三种方式的看法吧
代码一:
function t(x){
return x*x;
}
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
function a(x){
return xx;
}
var b=function(x){
return xx;
}
var t=new Function("x","return x*x;");
alert(typeof a); //function
alert(typeof b); //function
alert(typeof c); //function
表明他们都是function类型
alert(a instanceof Function); //true
alert(b instanceof Function); //true
alert(c instanceof Function); //true
表明他们都是属于Function对象派生
alert(a instanceof Object); //true
alert(b instanceof Object); //true
alert(c instanceof Object); //true
表明他们都是属于Object对象派生
alert(Objcet.prototype.toString.call(a)); //[object function]
alert(Objcet.prototype.toString.call(b)); //[object function]
alert(Objcet.prototype.toString.call(c)); //[object function]
表明他们都是object下function类型
alert(a.constructor); //Function
alert(b.constructor); //Function
alert(c.constructor); //Function
alert(a.prototype); //object object
alert(b.prototype); //object object
alert(c.prototype); //object object
//表明他们都是通过Function构造,而他们的原形都指向object
以上测试看来,他们在语言本身是没什么不同的.但是在定义上的处理方式会有不同
以function 形式声明的函数,会在词发分析的时候进行声明.
b(); //1
var b = function(){aelrt(2)};
b(); //2
function b(){alert(1)};
在if内不同的声明,会有不同的效果.
var fn = function(){return false};
(function(){
if(fn()){
function fn(){return true}
}
alert(fn());
})();
上面这段代码会产生歧义,不同浏览器下有不同的小规模
ie true
chrome true
firefox false
若上面的代码,把if内的fn定义,以变量形式定义,则不存在歧义
函数内部定义函数
function a(b){
alert(b);
function b(){alert('this is b')}
b();
}
a(1);
上面代码输出function b的函数体,再执行b函数;
因为作用域会先分析arguments,然后再是function定义,然后再是以变量形式的声明
如果b以变量形式声明,则会先输出1,再执行b函数
函数声明式,函数表达式,函数构造器创建。
推荐看下:http://www.cnblogs.com/TomXu/archive/2012/01/30/2326372.html