02 | 函数即对象:一篇文章彻底搞懂JavaScript的函数特点
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
JavaScript中的函数是一等公民,具有特殊的对象属性,可以赋值给变量、作为参数传递给其他函数,甚至作为另一个函数的返回值。这种特性使得JavaScript非常灵活,容易实现闭包和函数式编程等特性。文章深入分析了JavaScript中的对象和函数的本质,指出JavaScript中的对象是由一组属性和值构成的集合,而函数除了拥有常用类型的属性值外,还拥有两个隐藏属性,分别是name属性和code属性。由于函数是一种特殊的对象,支持函数是一等公民的语言可以使得代码逻辑更加清晰,代码更加简洁。然而,由于函数的“可被调用”的特性,使得实现函数的可赋值、可传参和可作为返回值等特性变得有一点麻烦。文章还介绍了闭包的概念,即将外部变量和函数绑定起来的技术,以及V8在实现闭包特性时所做的工作。总的来说,本文通过深入分析JavaScript中函数的特性,帮助读者更好地理解JavaScript中函数的概念和底层机制。 JavaScript中的函数是一等公民,具有特殊的对象属性,可以赋值给变量、作为参数传递给其他函数,甚至作为另一个函数的返回值。这种特性使得JavaScript非常灵活,容易实现闭包和函数式编程等特性。文章深入分析了JavaScript中的对象和函数的本质,指出JavaScript中的对象是由一组属性和值构成的集合,而函数除了拥有常用类型的属性值外,还拥有两个隐藏属性,分别是name属性和code属性。由于函数是一种特殊的对象,支持函数是一等公民的语言可以使得代码逻辑更加清晰,代码更加简洁。然而,由于函数的“可被调用”的特性,使得实现函数的可赋值、可传参和可作为返回值等特性变得有一点麻烦。文章还介绍了闭包的概念,即将外部变量和函数绑定起来的技术,以及V8在实现闭包特性时所做的工作。总的来说,本文通过深入分析JavaScript中函数的特性,帮助读者更好地理解JavaScript中函数的概念和底层机制。
《图解 Google V8》,新⼈⾸单¥59
全部留言(56)
- 最新
- 精选
- pedro基本上近些年出现的编程语言,函数都是一等公民,比如谷歌强推的kotlin和go,大数据语言scala,还有rust,当然还有老牌的经典函数语言Haskell等等。顺带问一下,老师的画图很好看,请问是什么软件画的😃
作者回复: mac上的kenote,我们编辑MM画的
2020-03-16232 - 旺旺如果在函数对象上再用代码foo.name="aaaa",这会覆盖函数的名称吗?
作者回复: 不会的,编译规程中已经生成函数对象了,对应的作用域中也保存了指向对象的引用了,所以对象本身的name属性改变是不会影响到函数正常的执行的
2020-04-04621 - 我爱学习请问文中的原始值是指规范中 “primitive value” 吗?如果是,我有以下疑问: 首先,在规范中 “primitive value” 的定义如下: “4.3.2 primitive value member of one of the types Undefined, Null, Boolean, Number, BigInt, Symbol, or String” 上述并没有包含文中提到的 object,或者是 object 作为原始值应该如何理解?然后原始值和基本数据类型的值有什么区别?
作者回复: 这个我写错了,Object是对象类型,不是原始类型,我改过来了。
2020-03-1613 - oillie在函数内使用了某个变量,却没有在这个函数中声明,这种变量叫free variable,比如上面的number变量
作者回复: 补充的真好,
2020-03-2829 - 杨越小米面试题: 1.闭包 2.作用域链 3.原型链 4.两个链之间的区别
作者回复: 常用的一些面试题,学完本专栏,会从根本上理解这些题目
2020-03-1639 - Gray在js中,函数是一种特殊的对象,理解了这一点,今天我就没白学
作者回复: 对,理解这一点非常重要,后很多概念都需要这个基础
2020-03-167 - 可可第一次,简单和清晰明白了JavaScript中的闭包和一个函数在那些方面是一个特殊的对象,👍。 解释的果然深入浅出。 另一个函数是一等公民的,知道的有Python
作者回复: 赞
2020-03-1627 - 法正老师,是不是可以这样说,正是因为函数在JS中是一等公民,所以才有了闭包。闭包的出现就是为了实现函数可以赋值给一个变量、也可以作为函数的参数、还可以作为函数的返回值这些特性。
作者回复: 对,闭包还能实现变量的封装
2020-06-1226 - 我来人间一趟有个问题想请教下老师,生成ast语法树是一次性将所有代码都结构化成ast吗 还是部分结构化呀
作者回复: 部分啊,后面惰性解析会讲
2020-04-295 - 芳华年月老师,code属性打印不出来,code属性可以查看吗
作者回复: 这个是v8提供的内部属性,没有提供js接口
2020-04-115