前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >遇到这几个 JS “神(qi)奇(pa)“写法也是醉了......

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

作者头像
掘金安东尼
发布2022-09-19 11:00:02
4670
发布2022-09-19 11:00:02
举报
文章被收录于专栏:掘金安东尼

这是我参与11月更文挑战的第20天,活动详情查看:2021最后一次更文挑战


本篇译自:https://javascript.plainenglish.io/5-trickiest-javascript-interview-questions

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

image.png
image.png

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

奥力给,冲了!🏄‍

你有鹰眼吗?

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

代码语言:javascript
复制
const numbers = [1, 2, 3, 4];

for (var i = 0; i < numbers.length; i++);{ 

    console.log(`The number is ${numbers[i]}`)
    
}

结果是:

代码语言:javascript
复制
// The number is undefined

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

代码语言:javascript
复制
const numbers = [1, 2, 3, 4];

for (var i = 0; i < numbers.length; i++){ 

    console.log(`The number is ${numbers[i]}`)
    
}

它的打印才是:

代码语言:javascript
复制
// The number is 1
// The number is 2
// The number is 3
// The number is 4

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

代码语言:javascript
复制
for (var i = 0; i < numbers.length; i++); <==== 就是这个分号

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

变量提升?

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

代码语言:javascript
复制
numbers();

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

numbers();

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

numbers();

答案是:

代码语言:javascript
复制
// Number two
// Number one
// Number one

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

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

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

代码语言:javascript
复制
console.log(a);

var a;

console.log(b);
代码语言:javascript
复制
// undefined

// Uncaught ReferenceError: b is not defined

闭包?

猜以下输出:

代码语言:javascript
复制
let counter = function() {  

    let k = 0;  

    return () => k++;

}();

console.log(counter());
console.log(counter());
console.log(counter());
console.log(counter());

答案是:

代码语言:javascript
复制
// 0

// 1

// 2

// 3

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

闭包的另一种情况:

代码语言:javascript
复制
let count = 0;

(function immediate() {  

    if (count === 0) {    

        let count = 1;    

        console.log(count); // What is logged?  

    }  

    console.log(count); // What is logged?

})();

结果是:

代码语言:javascript
复制
// 1

// 0

神奇~ 闭包就得细看~

this 指向?

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

猜以下代码输出:

代码语言:javascript
复制
var length = 4;

function callback() {  

    console.log(this.length);

}

const object = {  

    length: 5, 

    method() {   

        arguments[0]();  

    }
};

object.method(callback, 1, 2);

输出是:

代码语言:javascript
复制
// 3

数组长度?

代码语言:javascript
复制
const fruits = [‘mango’, ‘apple’];

fruits.length = 0;

console.log(fruits[0]);

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

代码语言:javascript
复制
// undefined

神奇~~


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

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

我是掘金安东尼,公众号同名,日拱一卒、日掘一金,再会~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 你有鹰眼吗?
  • 变量提升?
  • 闭包?
  • this 指向?
  • 数组长度?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档