Pro*_*ofK 138 javascript
在最近的一个问题中,我收到了一些建议,其中包括JavaScript的方面,其中函数是"第一类"对象.与其他对象相比,"第一类"在这种情况下意味着什么?
编辑(JörgWMittag):完全重复:"什么是一流的编程结构?"
San*_*uys 168
引用维基百科:
在计算机科学中,如果一种编程语言将函数视为一等对象,则它被称为支持一等函数(或函数文字).具体来说,这意味着该语言支持在程序执行期间构造新函数,将它们存储在数据结构中,将它们作为参数传递给其他函数,并将它们作为其他函数的值返回.
这个页面也很好地说明了它:
真的,就像任何其他变量一样
还阅读了TrayMan的评论,有趣......
Jör*_*tag 44
编程语言中的"一流功能"的概念是由英国计算机科学家克里斯托弗·斯特拉奇在20世纪60年代引入的.这个原则最着名的表述可能是Gerald Jay Sussman和Harry Abelson 的计算机程序结构和解释:
基本上,这意味着您可以使用编程语言中的所有其他元素完成所有功能.因此,对于JavaScript,它意味着您可以使用Integer,String,Array或任何其他类型的Object执行的所有操作,您也可以使用函数.
Arm*_*ian 14
更完整地批准了Strachey-Sussman-Abelson的制定.因此,如果您的语言支持这样的构造,那么您将获得一个函数作为一流的语言:)
var men = function (objectOfAdmiration) {
return objectOfAdmiration();
};
men.isSweetHeart = true;
var women = function (objectOfAdmiration) {
return objectOfAdmiration();
};
women.isSweetHeart = true;
var aliens = function (objectOfAdmiration) {
return objectOfAdmiration();
};
function like(obj){
if (obj.isSweetHeart) {
return function (){ return "Holy TRUE!"};
}
else {
return function (){ return "Holy CRAP!"};
}
}
alert("Men like women is " + men(like(women))); // -> "Holly TRUE!"
alert("Women like men is " + women(like(men))); // -> "Holly TRUE!"
alert("Men like aliens is " + men(like(aliens))); // -> "Holly CRAP!"
alert("Aliens like women is " + aliens(like(women))); // -> "Holly TRUE!" :)
//women(like(aliens)); // Who knows? Life is sometimes so unpredictable... :)
Run Code Online (Sandbox Code Playgroud)
简而言之,任何东西都是第一类对象,如果它在语言中作为状态操作类对象或对象类型.只需要您可以操作并传递语句并同时在表达式中进行评估.甚至更短:当你可以将一个函数视为可以另外调用的对象时.
小智 9
JavaScript函数是第一类函数,意味着函数和对象被视为同一个东西.函数可以作为变量存储在对象或数组中,也可以作为参数传递或由其他函数返回.这使得函数"成为JavaScript中的一等公民"
JavaScript使用文字符号语法,这使得很难完全掌握JavaScript函数是对象的事实.
例如..
var youObj1 = new Object();
// or
var youObj1 = {};
Run Code Online (Sandbox Code Playgroud)
这两个都是相同的.通过使用new
我们调用Object的构造函数.另外,通过使用{}
(称为文字的JavaScript快捷方式),我们调用了Object的构造函数.{}
只是实例化构造函数的简短表示.
大多数语言使用new
关键字来创建对象,因此我们创建一个JavaScript对象.
var myFunction = new Function("a", "b", 'return a_b');
Run Code Online (Sandbox Code Playgroud)
如您所见,我们创建了一个对象名称函数.
使用JavaScript函数表达式创建相同的对象名称函数
var myFunction = function myFunction(a,b) {
return a+b;
}
Run Code Online (Sandbox Code Playgroud)
我们在这里创建一个对象名称函数.
在javascript函数中是第一类对象,因为它可以比对象可以做的更多.
Function instanceof Object //returns true
像对象一样,函数可以具有属性,并且可以具有返回其构造函数的链接.
var o = {}; // empty object 'o'
o.a = 1 ;
o.b = 2 ;
console.log(o.a); // 1
console.log(o.b); // 2
function foo(){};
foo.a = 3 ;
foo.b = 4 ;
console.log(foo.a); // logs 3
console.log(foo.b); // logs 4
Run Code Online (Sandbox Code Playgroud)
var foo = function(){};
console.log(foo); // function(){}
Run Code Online (Sandbox Code Playgroud)
function callback (foo){
foo();
}
callback(function(){console.log('Successfuly invoked as an argument inside function callback')})
Run Code Online (Sandbox Code Playgroud)
function foo(){
return function(){console.log('working!')};
}
var bar = foo();
bar(); // working!
Run Code Online (Sandbox Code Playgroud)
var sum = function (a,b){return a+b}
sum(4,4);
Run Code Online (Sandbox Code Playgroud)
简单的测试.如果您可以用您的语言(Python作为示例)执行此操作:
def double(x):
return x*x
f = double
print f(5) #prints 25
Run Code Online (Sandbox Code Playgroud)
您的语言将函数视为第一类对象.
Mozilla 网站上的定义简洁明了。根据他们,
在 JavaScript 中,函数是一等对象,因为它们可以像任何其他对象一样具有属性和方法。它们与其他对象的区别在于可以调用函数。简而言之,它们是 Function 对象。
和
函数是一个“子程序”,可以由函数外部(或递归情况下的内部)代码调用。与程序本身一样,函数由一系列称为函数体的语句组成。值可以传递给函数,函数将返回一个值。
归档时间: |
|
查看次数: |
60465 次 |
最近记录: |