js函数简解

一、函数声明的5种方法
  1. 具名函数
function fun(x,y){   return x+y    }
fun.name     //'fun'
  1. 匿名函数
var fun = function(x,y){  return x+y  }
fun.name     // "fun"
  1. 具名函数赋值
var f = function f2(x,y){ return x+y }
f.name    //'f2'
console.log(f2)   // f2 is not defined     注意不是undefined
  1. window.Function
var f = new Function('x','y','return x+y')
 f.name // "anonymous"  匿名
  1. 箭头函数
    假如方法里只有一句话,那么花括号可以省略
var f = (x,y) => {  return x+y }
var sum = (x,y) => x+y
var n2 = n => n*n
二、函数的调用
function f1(x,y){
	return x+y;
}
//调用方法一
f1(2,3)       //5
//调用方法二   推荐这种
f1.call(undefined,3,4)      //7

简解:f.call(asThis, input1,input2)
其中 asThis (第一个参数)会被当做 this,
[input1,input2] 会被当做 arguments,arguments是个伪数组

三、函数的this、arguments、返回值
function f(){
	'use strict'
	console.log(this);
	console.log(arguments)
	return undefined;    // 每个函数都会有个返回值,默认为undefined ,即使你不写,浏览器运行时也会给函数加上
}
f.call(1,2,3)    // this 为 1,arguments 为 [2,3]

另外

//在调用call()方法时,第一个参数默认时this,假如第一个参数不填,那么this的值就是undefined
//在非严格模式下,所有函数返回undefined时,浏览器会自动将这个undifined转为window对象
//而在严格模式下,直接返回undefined
function f(){
    console.log(this)
}
f.call()   //window   这是一个window对象

function f2(){
    'use strict'
    console.log(this)
}
f2.call()   //undefined
四、js的Call stack (调用栈)
五、作用域 && 闭包
  • 按照语法树,就近原则
  • 我们只能确定变量是哪个变量,但是不能确定变量的值
var a = 1;
function f1(){  console.log(a) }
function f2(){ var a = 2; console.log(a) }
function f3(){  console.log(a);var a = 2; }    
f1.call()   //1
f2.call()   //2
f3.call()   //undefined      浏览器读取函数时,先进行变量提升再执行函数的,

如果一个函数,使用了它范围外的变量,那么(这个函数+这个变量)就叫做闭包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值