var a=new function(){};
var a=new Function(){};
var a=function(){};
function a(){};
主要是这几个吧,就是不太清楚它们之间的具体区别?
var a=new function(){};
var a=new Function(){};
var a=function(){};
function a(){};
主要是这几个吧,就是不太清楚它们之间的具体区别?
JS中function是关键字,Function是全局对象(是所有函数的构造函数)。
第一个相当于用new操作符调用了一个匿名函数,因此返回一个对象,typeof a === 'object'
第二个SyntaxError,估计你想表达的是var a=new Function(); 此时a为一个函数
第三个是将右侧的匿名函数表达式赋值给变量a
第四个是函数声明
首先 function
和 Function
是有本质上的差异,前者是关键词,后者是Function对象。二者更应该分开来使用。
其实就像是 eval
一样,除性能上是一个诟病以外,也同它一样一不小心很难控制上下文。
另,Function 产生的是全局作用域下的 non-strict 函数。
综合上述,还是不要去用它的好。
不过有时候是必须的,像字符串模板引擎,有兴趣阅读artTemplate的源代码。
另,题主的写法是错误的,不应该包括 {}
。
首先通过关键词创建变量实际是一个指针。
而对于3、4声明方式差不多相同,除了解析器优先被识别的差异而已:
-- success
console.log(a());
function a() { return 'ok'; }
-- error
console.log(b());
var b = function() { return 'ok'; }
以上。
这个东西牵扯的面还是比较广的:
先简述一下几个概念:
构造器
构造函数,就是一个普通的函数,与其他函数没有任何区别,可以理解为 函数==构造函数,
它只是概念上的一个定义,使用它用来实例化对象。
对于JavaScript的内置对象,Object、Array、Date等等这些都是构造函数。
————摘自百度
函数声明
构建一个方法可传入参数,执行特定的操作或返回某些值
Function
Function
是所有function
的构造函数
可以通过 new Function(/*function string*/)
的形式创建一个function
var a = new Function();
可以创建一个空函数
new Function(){}
的写法是不正确的
new function(/args/)
这个写法会返回一个对象而非函数
这是标准构造函数的用法
构造函数默认返回this
值,若构造函数包含return
,则返回return
的内容
function funName(/args/){/TODO:/}
这是一个声明函数的方式
该函数名为funName
基于ES5标准,该函数的name属性为funName的字符串形式
执行该函数的方法为 funName(/args/);传入的参数一般需要提前声明
JS中function构成最基本的作用于
function(/args/){/TODO:/}
这是另一个声明函数的方式
这种声明方式被称为匿名函数
匿名函数
不能独立存在,需要在函数前添加其他操作符,如:
(function(){})
+function(){}
=function(){}
例如 var a=function(){}
:function(){}
例如 var a={s:function(){}};
...
匿名函数若被赋值给一个独立
变量,则name属性为该变量名的字符串形式
若将一个匿名函数赋值给一个对象的属性,这name属性为空字符串
/*
* 首先a不是一个函数,而是一个对象
* function(){}声明了一个空匿名函数
* new 关键字通过空的匿名函数创建了一个空对象
*/
var a=new function(){};
/*
* 这里报错
* Unexpected token {
* 不应出现{
*/
var a=new Function(){};
/*
* 声明一个匿名函数
* 并赋值给变量a
*/
var a=function(){};
/*
* 声明一个名为a的函数
*/
function a(){};
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答867 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决
第一个是将function当作构造函数,用new创造一个对象,a会得到function的this。
第二个不出意外会报错,Function是函数的构造对象,在js里,每个函数其实都是Function的对象。
第三个是申明一个变量,将函数表达式赋值给这个变量。
第四个是函数声明。