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 支持嵌套函数。嵌套函数可以访问上一层的函数变量。
闭包是可访问上一层函数作用域里变量的函数,即便上一层函数已经关闭。
因为变量被引用着所以不会被回收,因此可以用来封装一个私有变量。这是优点也是缺点,不必要的闭包只会增加内存消耗。或者说闭包就是子函数可以使用父函数的局部变量,还有父函数的参数。