js备战春招の四のjs函数

1.普通函数声明:

2.函数表达式:函数表达式可以存储在变量中,在函数表达式存储在变量后,变量也可作为一个函数使用:

      以上函数实际上是一个 匿名函数 (函数没有名称)。函数存储在变量中,不需要函数名称,通常通过变量名来调用。

      上述函数以分号结尾,因为它是一个执行语句。

3.Function构造函数:

4.函数有提升:同变量一样的Hoisting的属性。即函数可以在声明之前调用。

5.自调用函数:自调用函数后面紧跟(),不能自调用声明的函数。即匿名自我调用的函数,没有函数名的存在。

      

注意:在自调用中出现的问题(当function没有赋值自己给一个变量时,表示其需要自调用一次,而赋值后则没有这种表示,在变量调用之前,其中变量一般表示对象。)

6.函数可作为一个值使用

7.函数是对象:arguments.length 属性返回函数调用过程接收到的参数个数:toString() 方法将函数作为一个字符串返回:

注意:函数定义作为对象的属性,称之为对象方法。函数如果用于创建新的对象,称之为对象的构造函数。

JavaScript 函数对参数的值没有进行任何的检查。

JavaScript 函数定义时显式参数没有指定数据类型。

JavaScript 函数对隐式参数没有进行类型检测。

JavaScript 函数对隐式参数的个数没有进行检测。

如果函数在调用时未提供隐式参数,参数会默认设置为: undefined,undefined 为 false。

如果函数调用时设置了过多的参数,参数将无法被引用,因为无法找到对应的参数名。 只能使用 arguments 对象来调用JavaScript 函数有个内置的对象 arguments 对象。argument 对象包含了函数调用的参数数组。

隐式参数的改变在函数外是不可见的修改对象属性在函数外是可见的。

javascript函数调用:

一般而言,在Javascript中,this指向函数执行时的当前对象,this 是保留关键字,你不能修改 this 的值。

 1.作为一个函数调用:

 a。在HTML 中默认的全局对象是 HTML 页面本身,所以函数是属于 HTML 页面。在浏览器中的页面对象是浏览器窗口(window 对象)。以上函数会自动变为 window 对象的函数。

myFunction() 和 window.myFunction() 是一样的:

b。当函数没有被自身的对象调用时, this 的值就会变成全局对象。在 web 浏览器中全局对象是浏览器窗口(window 对象)。

2.函数作为一个方法调用:

3.使用构造函数调用函数:

a。如果函数调用前使用了 new 关键字, 则是调用了构造函数。这看起来就像创建了新的函数,但实际上 JavaScript 函数是重新创建的对象:

b。构造函数的调用会创建一个新的对象。新对象会继承构造函数的属性和方法。构造函数中 this 关键字没有任何的值。this 的值在函数调用实例化对象(new object)时创建。

4.作为函数方法调用函数:

在 JavaScript 中, 函数是对象。JavaScript 函数有它的属性和方法。

call() 和 apply() 是预定义的函数方法。 两个方法可用于调用函数,两个方法的第一个参数必须是对象本身。

两个方法都使用了对象本身作为第一个参数。 两者的区别在于第二个参数: apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。

在 JavaScript 严格模式(strict mode)下, 在调用函数时第一个参数会成为 this 的值, 即使该参数不是一个对象。

在 JavaScript 非严格模式(non-strict mode)下, 如果第一个参数的值是 null 或 undefined, 它将使用全局对象替代。

通过 call() 或 apply() 方法你可以设置 this 的值, 且作为已存在对象的新方法调用。

总结:

javascript闭包:

在 JavaScript 中,所有函数都能访问它们上一层的作用域。

JavaScript 支持嵌套函数。嵌套函数可以访问上一层的函数变量。

闭包是可访问上一层函数作用域里变量的函数,即便上一层函数已经关闭。

因为变量被引用着所以不会被回收,因此可以用来封装一个私有变量。这是优点也是缺点,不必要的闭包只会增加内存消耗。或者说闭包就是子函数可以使用父函数的局部变量,还有父函数的参数。

原文地址:https://www.cnblogs.com/saber123/p/8546410.html