JS函数
2018-08-27 本文已影响0人
李不远
函数的5种声明
具名函数
function x (input1,input2){
return undefined
}
//x 是一个特殊的变量,但是只能是函数
//输入1,输入2是参数
//必须有一个rturn值,不写的话,浏览器会自动添加
匿名函数
x = function (input1,input2){
return undefined
}
//不能单独使用,需要赋给一个变量
具名函数赋给变量
var x = function y (input1,input2){}
console.log(y)
//Uncaught referenceError:y is not defined...
/* 不一致性!!! */
function y(){}
console.log(y)
//function y()
window.Function 函数对象
new Function('x','y','return x+y')
//x,y为参数;return x+y是函数体
箭头函数
(x,y) =>{return x+y}
(x,y) => x+y
//函数体只有一句话,不能返回一个对象;花括号和return一起去掉
n => n*n
//参数只有一个,可以省略参数的括号
函数的name
function f(){}
f.name //"f"
var f = function (){}
f.name //"f"
var f = function f1(){}
f.name//"f1"
f = new Function()
f.name//"anonymous" anonymous:匿名
如何调用函数
函数是什么?
JavaScript DOM编程艺术是这样定义的:
函数就是一组允许你在你的代码里随时调用的语句。每个函数实际上是一个短小的脚本。
eval():
作用:给一个字符串当作代码执行
eval('1+1')
eval('alert(1)')
call()
指向公用属性的__proto__.call()
调用函数的函数体
f 是指对象
f.call()是执行对象的函数体
调用
函数的调用过程就是eval(函数体)的过程
f.call = function(){
eval(f.body)
}
f.call()的用法
function f(x,y){return x+y}//函数本体
f(2,3) //普通调用
f.call(undefined,1,2) //正规硬核调用
this和arguments
arguments 是一个对应于传递给函数的参数的类数组对象。
this对象是在运行时基于函数的执行环境绑定的,无法在执行期间被复制。全局函数中,this等于window;当函数作为某个对象的方法调用时,this等于那个对象。
call的第一个参数可以用this得到
call的后面的参数可以用arguments得到
f.call(undefined,1,2)
//undefined是this
//1,2是argument
f = function(){
console.log(this)
console.log(arguments)
}
普通模式下,如果this是undefined;use strict严格模式,则this是window
如下所示
作用域
每个函数都有自己的执行环境;当代码在一个环境中执行时,会创建变量对象的一个作用域链
var a = 1
function f1(){
var a = 2
f2.call(undefined)
function f2(){
var a = 3
console.log(a)
}
}
f1.call(undefined)
console.log(a)
闭包
如果一个函数使用了它范围外的变量,那么这个函数加上这个变量就是闭包。
闭包是指有权访问另一个函数作用域中的变量的函数
——远方不远