让人崩溃的几个小例子
来源:互联网 发布:欧树怎么样知乎 编辑:程序博客网 时间:2024/05/01 15:42
var aa = function(){ this.b=1; this.c = function(){ alert(this.b); };};var a = new aa();function abc(func){ func();}abc(a.c);
这里很明显是undefined,这里的this指向的是window.
var aa = function(){ this.b=1; this.c = function(){ alert(this.b); };};var a = new aa();function abc(func){ func();}abc(function(){a.c();});
这里是1,应该是匿名函数块保存了上下文运行环境。
var aa = function(){ this.b=1; this.c = function(){ alert(this.b); };};var a = new aa();function abc(func){ alert(this.b); func();}abc.call(a,a.c);
我最开始愚蠢的写法,认为能改变this,这里只能改变abc函数的运行上下文环境为a,但是到func()时,还是会变为window,这里就相当于var func = a.c;func的定义环境在window,所以会指向window。
例如:
var aa = function(){ this.b=1; this.c = function(){ alert(this.b); };};var a = new aa();var bb = { b:2, c:function(){ alert(this.b); func(); }}var func = a.c;bb.c();
这里赋值的时候,就把运行上下文带到了window
var aa = function(){ this.b=1; this.c = function(){ alert(this.b); };};var a = new aa();function abc(func){ func.call(a);}abc(a.c);
改变运行上下文的正确写法。
还是总结下:传参传函数时能通过function(){func()}能保存到上下文不改变,如果传参传成func的话,要改变上下文环境,不能在调用该参数的函数时改变,而是在该参数被使用的地方改变上下文路径。
- 让人崩溃的几个小例子
- 几个Spring的小例子
- 几个移位的小例子
- 几个典型的小例子
- javascript的几个小例子
- Runtime的几个小例子
- 让对方崩溃的小程序
- 几个小例子让你分清super和this
- 让人崩溃的课程设计
- 让人崩溃的struts2
- GCD容易让人迷惑的几个小问题
- GCD 容易让人迷惑的几个小问题
- 几个简单的voip的小例子
- jfreechar关于坐标轴的几个小例子
- 几个文件操作的小例子
- Jquery GetJson的几个实用小例子
- 深入理解js的几个小例子
- shell的几个实际小例子
- 倒排索引及布尔查询的处理算法
- sizeof(++i) 结果
- 科技论文的分类及写作
- linux启动bootargs参数分析,如何加载解析到参数表
- 新站百度排名如何超越老站排名
- 让人崩溃的几个小例子
- 集群部署 Tachyon
- 制作App的入门教程
- LeetCode 之 Plus One
- centos gcc 升级
- Extjs 使用fileText 文件上次后 无法解析后台返回的json问题
- 黑马程序员_监听器
- 监听器原理
- 关于拖延症