js

作用域

变量的作用域分为全局作用域局部作用域块级作用域
全局作用域:
最外层函数定义的变量拥有全局作用域,即对任何内部函数来说,都是可以访问的

	var count = 0
	function fn(){
       console.log(count);
    }
    fn()//result:0

局部作用域:
局部作用域一般只在固定的代码片段内可访问到,而对于函数外部是无法访问的

<script>
      function fn(){
         var count = 0
      }
      fn();
      console.log(count)// count is not defined

块级作用域:
块作用域由 { } 包括

	for(let i = 0; i < 10; i++){
		console.log(i)
	}

作用域链
根据在内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问

	function fn1(){
		var count = 0
		console.log(count2) //count2 is not defined
		function fn2(){
			var count2 = 1
			console.log(count)//fn2可以访问到count
		}
	}

闭包

闭包就是能够读取其他函数内部变量的函数

	function fn (){
		var count = 0
		return function (){
			console.log(count)
		}
	}
	var fn2 = fn()
	fn2() //result:0

作用1:隐藏变量,避免全局污染

作用2:可以读取函数内部的变量

缺点1:导致变量不会被垃圾回收机制回收,造成内存消耗

缺点2:不恰当的使用闭包可能会造成内存泄漏的问题

this指向

fn.bind()、 fn.call() 、fn.apply()
他们都是改变this指向的方法 第一个参数都是this的指向
区别:
	bind返回一个函数 
	call的参数是以散落的形式传递给函数
	apply是以数组的形式传递参数
	bind有返回值 返回值是调用bind方法的函数本身
	call 没有返回值 他的第一个参数是要this的指向。第一个参数是谁,函数内部的this就指向谁其他参数以散落的形式传递给函数作为实参
	apply 没有返回值 他的第一个参数是要this的指向。第一个参数是谁,函数内部的this就指向谁其他参数以数组的形式传递给函数作为实参
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值