遇到这几个 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,以上就是本篇分享~ 撰文不易,点赞鼓励👍👍👍


相关文章
|
8月前
|
JavaScript
js -- 函数总结篇,函数提升、动态参数、剩余参数、箭头函数、this指向......
js -- 函数总结篇,函数提升、动态参数、剩余参数、箭头函数、this指向......
|
9月前
|
JavaScript 前端开发
js基础——事件(鼠标事件、键盘事件、表单事件......)
js基础——事件(鼠标事件、键盘事件、表单事件......)
73 0
|
JavaScript 前端开发 程序员
|
开发框架 JavaScript 前端开发
HarmonyOS学习路之开发篇—Java UI框架(使用工具自动生成JS FA调用PA代码)
JS FA(Feature Ability)调用PA (Particle Ability)是使用基于JS扩展的类Web开发范式的方舟开发框架所提供的一种跨语言能力调用的机制,用于建立JS能力与Java能力之间传递方法调用、处理数据返回以及订阅事件上报的通道。开发者可以使用FA调用PA机制进行应用开发,但直接使用该机制需要开发者手动撰写大量模板代码,且模板代码可能与业务代码相互耦合,使得代码可维护性和可读性较差。
|
开发框架 JavaScript 前端开发
HarmonyOS学习路之开发篇—Java UI框架(JS FA调用Java PA)
使用兼容JS的类Web开发范式的方舟开发框架提供了JS FA(Feature Ability)调用Java PA(Particle Ability)的机制,该机制提供了一种通道来传递方法调用、处理数据返回以及订阅事件上。
|
JavaScript 前端开发 索引
手撕前端面试题(Javascript~事件委托、数组去重、合法的URL、快速排序、js中哪些操作会造成内存泄漏......
手撕前端面试题(Javascript~事件委托、数组去重、合法的URL、快速排序、js中哪些操作会造成内存泄漏......
177 0
手撕前端面试题(Javascript~事件委托、数组去重、合法的URL、快速排序、js中哪些操作会造成内存泄漏......
|
3月前
JS+CSS3文章内容背景黑白切换源码
JS+CSS3文章内容背景黑白切换源码是一款基于JS+CSS3制作的简单网页文章文字内容背景颜色黑白切换效果。
34 0
|
3月前
|
JavaScript 前端开发
JavaScript中的原型 保姆级文章一文搞懂
本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。
50 1
JavaScript中的原型 保姆级文章一文搞懂
|
6月前
|
JavaScript 前端开发
JS:一篇文章带你搞懂什么是异步
JS:一篇文章带你搞懂什么是异步
|
7月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
196 4

热门文章

最新文章

  • 1
    当面试官再问我JS闭包时,我能答出来的都在这里了。
    46
  • 2
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    29
  • 3
    Node.js 中实现多任务下载的并发控制策略
    34
  • 4
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    26
  • 5
    【JavaScript】深入理解 let、var 和 const
    49
  • 6
    【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
    47
  • 7
    【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
    57
  • 8
    【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
    57
  • 9
    如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
    72
  • 10
    【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
    55