js中的函数
分类:javascript
什么是函数
- 为实现某一任务或者功能的代码块
怎么定义使用函数
-
通过
function
定义在js中我们可以通过
function
关键词定义一个函数,后面是函数名和括号()function foo(a,b){ return a+b } //函数调用的时 foo() ···
-
也可通过表达式定义函数
它相当于定义个函数赋值给foo,它也是一个匿名函数,因为没有函数名
const foo = function(a,b){ return a+b } //函数调用的时 foo()
-
ES6中新增了箭头函数
它实际就相当于个匿名函数,简化了它的操作,但它和匿名函数又不同,箭头函数是没有
this
的,它的this是根据上下文继承下来的.//例如上面的函数可以用箭头函数写成这样 const foo = (a,b) => a+b //当没有参数 () ;有一个参数,比如a ,可以直接 a => {...};当多个参数是(a,b,c).如果只有一条返回语句,可以将return也省略;多条时用花括号包裹.
变量的作用域
-
在函数内var定义一个变量是有它的作用域的,它会提升到这个函数整体,但是在外部是无法访问它的
function foo(){ var a = 1 a = a+1 } a = a+2 // a is not defined
同理,我们定义多个函数使用同一个变量名时,它们是互不影响的.
-
函数内定义函数定义的变量
function foo(){ function bar(){ var x = x+1 } x = x+2 } //x is not defined function foo(){ var x = 1 function bar(){ x = x+2 } } //x 可以访问
当我们在函数内定义一个函数时,内部函数可以访问到外部函数变量,而反过来外部函数却访问不到内部函数的变量.
也就是说js查找变量是从内向外查找的.
闭包
- 在上面说了内部函数可以访问到外部函数变量,而反过来外部函数却访问不到内部函数的变量.那么我们想要外部函数访问内部函数变量该怎么做呢?那就使用闭包实现.
它的优点在于可以将变量私有化,常驻在内存中,避免了变量的全局污染.
它的缺点在于在于内存泄漏
function foo(){
var a = 10; // foo的活动对象之中;
return function(){ //匿名函数的活动对象;返回的是这个函数
console.log(a)
}
}
var b = foo() 当调用foo时,返回的参数是一个函数
b() 调用b时才是返回真正的结果