关于JS那些容易被你忽略的那些点(3)
来源:互联网 发布:淘宝退货申请假冒品牌 编辑:程序博客网 时间:2024/06/05 14:08
demo eleven
不知道你前面的理解的怎么样了。现在你来判断下下面代码的输出
for (var i = 0; i < 5; i++) { var btn = document.createElement('button'); btn.appendChild(document.createTextNode('Button ' + i)); btn.addEventListener('click', function(){ console.log(i); }); document.body.appendChild(btn);}
很眼熟对不对,没错,稍微改下就能完成想要实现的功能了
for (var i = 0; i < 5; i++) { var btn = document.createElement('button'); btn.appendChild(document.createTextNode('Button ' + i)); (function(i){ btn.addEventListener('click', function(){ console.log(i); }); })(i); document.body.appendChild(btn);}你自己再控制台可以试一试,看是不是实现功能了
demo twelve
那么再来判断下下面这段代码
var arr1 = "john".split(''); j o h nvar arr2 = arr1.reverse(); n h o jvar arr3 = "jones".split(''); j o n e sarr2.push(arr3);console.log("array 1: length=" + arr1.length + " last=" + arr1.slice(-1));console.log("array 2: length=" + arr2.length + " last=" + arr2.slice(-1));
有两个要点,第一个是reverse()方法会将原数组改变,即arr1会变成n h o j
另外一个要点是类似以a = [0,1,2,3] , b = a这种形式的,如果改变b的值会使a的值也改变但是如果重新给b赋值则b的值不会进行改变
var a = [10,11,12]var b = a;b.push(55);console.log(b);console.log(a);
那如果是下面这种情况呢
var a = [10,11,12]var b = a;b = [1,2,5,8]console.log(b);console.log(a);运行一下答案就很明显了
demo thirteen
直接上代码
console.log(1 + "2" + "2");console.log(1 + +"2" + "2");console.log(1 + -"1" + "2");console.log(+"1" + "1" + "2");console.log( "A" - "B" + "2");console.log( "A" - "B" + 2);
记住几条规则
1.在数字字符串前面有“ + ”、“ - ”号的,运算过程中会将其转换为数字
2.对于无法运算的字符串,会返回NaN
demo fourteen
直接贴代码
for(var i = 0; i < 5; i++) { (function(i) { setTimeout(function() { console.log(i); }, i*1000); })(i)}
这道题之前提到过,但是由于上次只解决了一直输出5的问题,而忽略了另外一个问题。
这道题的原本目的是让每执行一次延时时间+1S,但是运行后会发现间隔一直只有一秒。
这是因为for循环执行很快,每次循环几乎是同时执行,所以导致了你觉得每次延时只有一秒钟
demo fifteen
var hero = { _name: 'John Doe', getSecretIdentity: function (){ return this._name; }};var stoleSecretIdentity = hero.getSecretIdentity;console.log(stoleSecretIdentity());console.log(hero.getSecretIdentity());
执行后结果并不是我们想要的。
这是因为stoleSecretIdentity的执行环境是全局,而getSecretIdentity的执行环境是hero,咱们可以这样进行修改
var hero = { _name: 'John Doe', getSecretIdentity: function (){ return this._name; }};var stoleSecretIdentity = hero.getSecretIdentity;console.log(stoleSecretIdentity.call(hero));console.log(hero.getSecretIdentity());
阅读全文
1 0
- 关于JS那些容易被你忽略的那些点(3)
- 关于JS那些容易被你忽略的那些点(1)
- 关于JS那些容易被你忽略的那些点(2)
- jQuery那些容易被忽略的问题
- 那些被你忽略的性能
- 注意那些容易被忽略的SQL注入技巧
- 注意那些容易被忽略的SQL注入技巧
- 注意那些容易被忽略的SQL注入技巧
- 注意那些容易被忽略的SQL注入技巧
- 请注意那些容易被忽略的SQL注入技巧
- 那些容易被忽略的Python编程方式
- 说一说z-index容易被忽略的那些特性
- C语言---那些容易被忽略的细节
- 那些我们容易忽略的好点子
- 关于推送,你可能忽略的那些事儿
- 请注意那些容易被忽略的SQL注入技巧(转)
- 关于js基础容易忘记的那些事儿
- DISPATCH_SOURCE_TYPE_TIMER那些容易坑的点
- 《数字技术》连载7: 第2章 数字器件 第2节 任意门电路
- dubbo学习总结
- spark(13)-RDD的依赖关系(corse22)
- buildnative.py Couldn't find the gcc toolchain.
- loadview,viewdidload,viewdidunload,dealloc之间的关系
- 关于JS那些容易被你忽略的那些点(3)
- spring boot 基本注解
- JS修改成功跳出弹窗,返回到上一页面
- vba 个人使用总结笔记
- 基于MATLAB的LDL分解法
- 使用Android-skin-support生成换肤包
- 安卓之路问题三
- bzoj3011 [Usaco2012 Dec]Running Away From the Barn (可并堆)
- 无人机系统PX4视频教程:飞行PID参数调试