遇到这几个 JS “神(qi)奇(pa)“写法也是醉了......

简介: 本篇带来 JS 几个“神奇”设计,先别急着吐槽,有遇到过加强更正,没遇到过以后尽量避免!奥力给,冲了!🏄‍

image.png

本篇译自:javascript.plainenglish.io/5-trickiest…

JS 的“神奇”之处我想不用再多赘述!

image.png


本篇带来 JS 几个“神奇”设计,先别急着吐槽,有遇到过加强更正,没遇到过以后尽量避免!


奥力给,冲了!🏄‍


你有鹰眼吗?



请问以下这段代码,输出是?


const numbers = [1, 2, 3, 4];
for (var i = 0; i < numbers.length; i++);{ 
    console.log(`The number is ${numbers[i]}`)
}


结果是:

// The number is undefined


哈?先别急,再看一段代码:


const numbers = [1, 2, 3, 4];
for (var i = 0; i < numbers.length; i++){ 
    console.log(`The number is ${numbers[i]}`)
}


它的打印才是:

// The number is 1
// The number is 2
// The number is 3
// The number is 4


你有鹰眼吗? 原来,这两端代码的差异在于 for 循环括号条件后的那个分号!!

for (var i = 0; i < numbers.length; i++); <==== 就是这个分号


。。。u1s1,多少有点扯了,多个分号不会报错,并且是另外一种结果;


变量提升?



再猜下以下这段代码的输出:

numbers();
var numbers = function () {
  console.log("Number one");
}
numbers();
function numbers() {
  console.log("Number two");
}
numbers();


答案是:

// Number two
// Number one
// Number one


这也很神奇,以不同方式定义函数会带来不同的效果~

变量提升总会搞得人五迷三道~


除了 function numbers() 这样声明函数会导致变量提升,还有 var 声明方式导致的变量提升,比如:

console.log(a);
var a;
console.log(b);
// undefined
// Uncaught ReferenceError: b is not defined


闭包?



猜以下输出:

let counter = function() {  
    let k = 0;  
    return () => k++;
}();
console.log(counter());
console.log(counter());
console.log(counter());
console.log(counter());


答案是:

// 0
// 1
// 2
// 3


没错,闭包记录了执行结果;

闭包的另一种情况:

let count = 0;
(function immediate() {  
    if (count === 0) {    
        let count = 1;    
        console.log(count); // What is logged?  
    }  
    console.log(count); // What is logged?
})();


结果是:

// 1
// 0


神奇~ 闭包就得细看~


this 指向?



this 指向别提了,就更神奇!


猜以下代码输出:

var length = 4;
function callback() {  
    console.log(this.length);
}
const object = {  
    length: 5, 
    method() {   
        arguments[0]();  
    }
};
object.method(callback, 1, 2);


输出是:

// 3


数组长度?



const fruits = [‘mango’, ‘apple’];
fruits.length = 0;
console.log(fruits[0]);
复制代码


竟然可以通过设置长度的方式,清除数组:

// undefined


神奇~~


小感:说是 JS 的神(qi)奇(pa),其实也就是 JS 作为脚本语言的灵活的特点,面对这些特点,得尤其小心使用,才不至于被搞蒙~~

OK,以上就是本篇分享~ 撰文不易,点赞鼓励👍👍👍


相关文章
|
4月前
|
JavaScript 前端开发
js基础——事件(鼠标事件、键盘事件、表单事件......)
js基础——事件(鼠标事件、键盘事件、表单事件......)
30 0
|
7月前
|
JavaScript 前端开发 程序员
|
JavaScript 前端开发 索引
手撕前端面试题(Javascript~事件委托、数组去重、合法的URL、快速排序、js中哪些操作会造成内存泄漏......
手撕前端面试题(Javascript~事件委托、数组去重、合法的URL、快速排序、js中哪些操作会造成内存泄漏......
126 0
手撕前端面试题(Javascript~事件委托、数组去重、合法的URL、快速排序、js中哪些操作会造成内存泄漏......
|
3月前
|
JavaScript
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
30 0
|
3月前
|
消息中间件 Web App开发 JavaScript
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
81 0
|
11天前
|
存储 移动开发 JavaScript
学习javascript,前端知识精讲,助力你轻松掌握
学习javascript,前端知识精讲,助力你轻松掌握
|
17天前
|
JavaScript 前端开发 测试技术
学习JavaScript
【4月更文挑战第23天】学习JavaScript
13 1
|
25天前
|
JavaScript 前端开发 应用服务中间件
node.js之第一天学习
node.js之第一天学习
|
2月前
|
运维 JavaScript 前端开发
发现了一款宝藏学习项目,包含了Web全栈的知识体系,JS、Vue、React知识就靠它了!
发现了一款宝藏学习项目,包含了Web全栈的知识体系,JS、Vue、React知识就靠它了!
|
2月前
|
JavaScript
Vue.js学习详细课程系列--共32节(6 / 6)
Vue.js学习详细课程系列--共32节(6 / 6)
28 0