js函数作用域及this指向
2017-05-12 16:50
399 查看
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div id="result">代码输出结果:<br/></div> <!--当不用this时--> <!--<script>--> <!--var name = 'window下的name<br/>';--> <!--var resultCon;--> <!--function fn1() {--> <!--resultCon.innerHTML += name;--> <!--}--> <!--function MyObj() {--> <!--var name = 'MyObj下的name<br/>';--> <!--this.doFunction = function() {--> <!--resultCon.innerHTML += name;--> <!--};--> <!--}--> <!--window.onload = function() {--> <!--resultCon = document.getElementById('result');--> <!--var name = "onload下的name<br/>";--> <!--var fn2 = function() {--> <!--resultCon.innerHTML += name;--> <!--};--> <!--fn1();//window下的name--> <!--fn2();//onload下的name--> <!--var obj = new MyObj();--> <!--obj.doFunction();//MyObj下的name--> <!--};--> <!--</script>--> <!--当使用this时--> <!--<script>--> <!--var name = 'window下的name<br/>';--> <!--var resultCon;--> <!--function fn1() {--> <!--resultCon.innerHTML += this.name;--> <!--}--> <!--function MyObj() {--> <!--var name = 'MyObj下的name<br/>';--> <!--this.doFunction = function() {--> <!--resultCon.innerHTML += this.name;--> <!--};--> <!--}--> <!--window.onload = function() {--> <!--resultCon = document.getElementById('result');--> <!--var name = "onload下的name<br/>";--> <!--var fn2 = function() {--> <!--resultCon.innerHTML += this.name;--> <!--};--> <!--fn1();//window下的name--> <!--fn2();//window下的name--> <!--var obj = new MyObj();--> <!--obj.doFunction();//undefined--> <!--};--> <!--</script>--> <!--说明了:--> <!--对于直接定义的函数,this指向window。--> <!--对于对象的方法,this指向实例化对象(对应于实例化对象默认返回this的情况)--> <!--当使用apply、call--> <!--<script>--> <!--var name = 'window下的name<br/>';--> <!--var resultCon;--> <!--function fn1() {--> <!--resultCon.innerHTML += this.name;--> <!--}--> <!--function MyObj() {--> <!--var name = 'MyObj下的name<br/>';--> <!--this.doFunction = function() {--> <!--resultCon.innerHTML += this.name;--> <!--};--> <!--}--> <!--window.onload = function() {--> <!--resultCon = document.getElementById('result');--> <!--var name = "onload下的name<br/>";--> <!--var fn2 = function() {--> <!--resultCon.innerHTML += this.name;--> <!--};--> <!--var myThis = {--> <!--name: "自定义的this的name属性<br/>"--> <!--};--> <!--fn1.call(myThis);//自定义的this的name属性--> <!--fn2.call(myThis);//自定义的this的name属性--> <!--var obj = new MyObj();--> <!--obj.doFunction.call(myThis);//自定义的this的name属性--> <!--};--> <!--</script>--> <!--调用时call和apply的使用是为了改变被调用函数的this指向--> <!--当使用this--> <!--<script>--> 4000 <!--var name = 'window下的name<br/>';--> <!--var resultCon;--> <!--function fn1(myScope) {--> <!--with (myScope) {--> <!--resultCon.innerHTML += name;--> <!--}--> <!--}--> <!--function MyObj(myScope) {--> <!--var name = 'MyObj下的name<br/>';--> <!--this.doFunction = function(myScope) {--> <!--with (myScope) {--> <!--resultCon.innerHTML += name;--> <!--}--> <!--};--> <!--}--> <!--window.onload = function() {--> <!--resultCon = document.getElementById('result');--> <!--var name = "onload下的name<br/>";--> <!--var fn2 = function(myScope) {--> <!--with (myScope) {--> <!--resultCon.innerHTML += name;--> <!--}--> <!--};--> <!--var myScope = {--> <!--name : "自定义变量查询域</br>"--> <!--};--> <!--fn1(myScope);//自定义变量查询域--> <!--fn2(myScope);//自定义变量查询域--> <!--var obj = new MyObj();--> <!--obj.doFunction(myScope);//自定义变量查询域--> <!--};--> <!--</script>--> <!--with的使用是为了改变被调用函数中变量的查询域。--> <!--在一些成熟的框架中随处可见call和apply的使用,却很少用到with,在用JSHint检测js语法的时候with处都标了小红点,在一些js编码指导中 也建议尽量少用with,因为with改变了变量的默认查询链,所以会给后期的维护人员一些困惑,还有性能方面的一些考虑,请慎用with。--> </body> </html>
相关文章推荐
- js函数的作用域与this指向
- js函数的作用域与this指向
- 深入理解js函数的作用域与this指向
- js 函数作用域与this 的指向实例
- 函数的作用域与this指向 --- 性能篇
- JS中setTimeout的作用域以及this的指向问题
- JS中函数的 this 各种指向
- JS-箭头函数中的this的指向
- JS 改变函数中 this 的指向
- js如何判断函数或者方法中的this指向谁?四句话
- [JS]事件函数中this的指向
- js中函数this指向问题
- 嗯,关于JS函数内部变量的赋值和调用以及this的用法
- JS全局变量VAR和THIS--在函数内部,加var是局部变量,不加是全局变量
- js绑定事件this指向发生改变的问题解决方法
- js函数及this指针
- js学习笔记之函数作用域
- JavaScript 中一句话的思索:this是函数在执行时所处的作用域
- 解决js绑定事件this指向发生改变的问题
- JS 如何将函数的this环境置为变量对象