自执行函数和this指向的问题

自执行函数

// 函数的自我执行:函数不需要调用,声明后就立即执行

(function fn(){
			console.log(111)
	})()

也可以在最后的的括号传参数

(function fn(a,b){
//			console.log(a+b)
//		})(3,4)

也可以用一个变量来接收

var result = (function fn(a,b){
		return a*b
		})(3,4)

// 有一个变量接收结果,第一个小括号可以省略。像这样

var result = function fn(a,b){ 
		return a*b
	}(3,4)
console.log(result)

自执行函数一般在封装第三方插件时使用,好处就是避免变量命名的冲突

this指向的问题

每产生一个上下文,上下文中都会生成一个this对象

	btn.onclick = function(){ // btn.onclick();
		// 每一个事件处理程序中的this.指向当前事件源对象
		console.log(this);
		window.box()
	}
function box(){
		console.log("可以使用window对象来调用box这个方法,只不过使用window下的属性或方法的时候一般会省略window这个对象 ")
		console.log(this)   //   window
	}

// 函数中的this指向情况
// 1. 每一个事件处理程序中的this.指向当前事件源对象
// 2, 每一个函数内部的this,指向调用这个方法的当前对象
// 3, 自定义函数内部的this指向window

	"use strict"
		
	function fn(){
		console.log(this)
	}
	fn();

ES5中的严格模式中 这个this是underfind

关于bind( ) call() 和 apply()

// 函数方法
// bind() es6新增方法,调用时函数不会运行,常用于匿名函数声明时改变this
// call() 调用时函数会连同执行,调用函数的时候使用call方法改变this对象
// apply() 调用时函数会连同执行,调用函数的时候使用call方法改变this对象,值需要传入数组

常见call例子

<style type="text/css">
			#box{
				width: 500px;
				height: 300px;
				background: red;
			}
		</style>
	</head>
	<body>
		<button id="btn">按钮 </button>
		<div id="box">
			
		</div>
	<script type="text/javascript">
		var btn = document.getElementById("btn")
		var box = document.getElementById("box")
	btn.onclick = function(){
			this.innerHTML = "提交"
			fn.call(box);
		}
		function fn(){
			this.style.background = "blue"
		}

在onclick中调用fn函数 并将fn 函数的this指向box call可以立刻执行 这样点击了btn 就能改变box的背景颜色

	btn.onclick = function(){
			this.innerHTML = "提交"
			this.style.background = "blue"
		}.bind(box)

在onclick函数后面调用bind方法直接改变this指向为box bind只是改变 不会调用onclick 这样点击onclick的时候就会改变box的背景颜色 还会添加文字 “提交”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值