函数的声明方法
函数的调用call
this
作用域和闭包
函数声明方法总结
具名函数
1234function fn(x,y){return x + y;}fn.name // 'fn'匿名函数
123function (x,y) {return x+y;}var fn=匿名函数
1234var fn = function(x,y) {return x+y;}fn.name // 'fn'var fn=具名函数
1234567891011var fn = function f2(x,y){return x+y};fn.name // 'f2'console.log(f2) // f2 is not defined等同于var fn;fn= function f2(x,y){return x+y}var fn=new Function()
12345678910111213参数和函数体都以字符串的形式var fn = new Function('x','y','return x+y')fn.name // "anonymous"面试题:var n = 3;var fn = new Function('x','y','return x+'+n+'+y');问:fn(2,4)的结果是A:9B:2n4C:234答案:9ES6箭头函数
1234567891011121314151617181920var fn = (x,y) => {return x+y};fn(2,3); // 5如果函数体只有一句话,可以去掉花括号和return:var sum = (x,y) => x+y;sum(4,5); // 9如果只有1个参数,可以简写为:var fn2 = n => n*n;fn2(4); // 16箭头函数的复杂写法:var fn = (x,y) => {const a=x*2;const b=y*3;return a+b;}fn(3,5) // 21
eval
eval
方法可以将字符串当做代码执行。
eval
方法一般很少会使用到。
函数的调用
|
|
this和伪数组arguments
this
就是call的第一个参数fn(参数1,参数2)
等同于fn.call(undefined,参数1,参数2)
,因此fn(参数1,参数2)
的this是undefined
this相关面试题
- this总是代表它的直接调用者(js的this是执行上下文), 例如 obj.fn ,那么fn中的this就是obj
- 在默认情况(非严格模式下,未使用 ‘use strict’),没找到直接调用者,则this指的是 window (约定俗成)
- 在严格模式下’use strict’,没有直接调用者的函数中的this是 undefined
- 使用call,apply,bind(ES5新增)绑定的,this指的是 绑定的对象12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667function f(){console.log(this)}f.call(1)// Number对象{1}function f1(){console.log(this)function f2(){}}var obj = {name: 'obj'}f1.call( obj )//{name: 'obj'}----------function f(){console.log(this)}f.call(1)// 1-------------function f(){console.log(this)//console.log(this === window)}f.call()// windowfunction f1(){function f2(){console.log(this)}f2.call()}var obj = {name: 'obj'}f1.call( obj )//window----------function f(){console.log(this)}f.call()//undefinedfunction f1(){;function f2(){console.log(this)}f2.call()}var obj = {name: 'obj'}f1.call( obj )//undefined
call stack
作用域面试题
最重要的一步:变量提升!!!!!
ES6中的let
闭包面试题
如果一个函数,使用了它外部作用域的变量,那么(这个函数+被使用的变量)就叫做闭包。
作业题
|
|
逗号表达式
逗号表达式的一般形式是:表达式1,表达式2,表达式3……表达式n
逗号表达式的求解过程是:先计算表达式1的值,再计算表达式2的值,……一直计算到表达式n的值。最后整个逗号表达式的值是表达式n的值。
看下面几个例子:
|
|
|
|