函数
2024年7月5日大约 2 分钟约 547 字
函数
函数调用
构造函数调用与常规函数和方法调用的区别在于参数处理、调用上下文和返回值。
构造函数调用会创建一个新的空对象,这个对象继承构造函数的prototype
属性指定的对象。构造函数就是为初始化对象而设计的,这个新创建的对象会被用作函数的调用上下文,因此在构造函数中可以通过this
关键字引用这个新对象。注意,即使构造函数调用看起来像方法调用,这个新对象也仍然会被用作调用上下文。换句话说,在表达式new o.m()
中,o
不会用作调用上下文。
构造函数正常情况下不使用return
关键字,而是初始化新对象并在到达函数体末尾时隐式返回这个对象。此时,这个新对象就是构造函数调用表达式的值。但是,如果构造函数显式使用了return
语句返回某个对象,那该对象就会变成调用表达式的值。如果构造函数使用return
但没有返回值,或者返回的是一个原始值,则这个返回值会被忽略,仍然以新创建的对象作为调用表达式的值。
闭包
前提:JavaScript
函数是使用定义它们的作用域来执行的。
严格来讲,所有JavaScript
函数都是闭包。但由于多数函数调用与函数定义都在同一作用域内,所以闭包的存在无关紧要。闭包真正值得关注的时候,是定义函数与调用函数的作用域不同的时候。最常见的情形就是一个函数返回了在它内部定义的嵌套函数。 很多强大的编程技术都是建立在这种嵌套函数闭包之上的,因此嵌套函数闭包在JavaScript
程序中也变得比较常见。
简言之,闭包的本质:它们会捕获自身定义所在外部函数的局部变量(及参数)绑定。