经典面试题(5):小心javascript自动插入分号机制
在《JavaScript语言精粹》这本书里,这个“自动插入分号”机制被划入到了JavaScript的毒瘤里面,与之并列的前面的全局变量。
有些时候,不合时宜地插入分号,会导致严重的后果。 比如一个return语句要正确返回一个值,这个值的表达式的开始部分必须和return位于同一行。
今天,我们就来聊聊这个知识点,看下面的代码函数,它们会返回什么?
function foo1(){ return {bar: "hello"};
}
function foo2(){ return{bar: "hello"};
}
出人意料的是,这两个函数返回的内容并不相同。更确切地说是:
console.log("foo1 returns:");console.log(foo1());console.log("foo2 returns:");console.log(foo2());
将产生:
foo1 returns:Object {bar: "hello"}foo2 returns:undefined
这不仅是令人惊讶,而且特别让人困惑的是, foo2()返回的是undefined,也没有任何错误抛出。
原因是这样的,当碰到 foo2()中包含return语句的代码行(代码行上没有其他任何代码),分号会立即自动插入到返回语句之后。请仔细留意上面两个函数中return的不同之处,foo2函数的return是单独一行的。
也不会抛出错误,因为代码的其余部分是完全有效的,即使它没有得到调用或做任何事情(相当于它就是是一个未使用的代码块,定义了等同于字符串 "hello"的属性 bar)。
所以,在使用return语句的时候,要留意javascript的这个特点,尽可能不要将return关键字写在独立的一行,避免不必造成不必要的错误。
热门文章
原创教程:
附加习题:
职场焦虑:
感到迷茫:
培训出身:
培训费用:
搞笑黑话:
职业自由:
职场形象:
合作推广分割线
经典面试题(5):小心javascript自动插入分号机制相关推荐
- JS自动插入分号机制ASI
文章目录 问题背景 ASI 插入分号的时机 1. JS 中一些语法后加上换行符后会自动加上分号 2. 并入新行后若成为非法语句则会自动插入分号 3. 以自增/减运算符 ++.-- 开头 4.特殊情况 ...
- html分号的作用,JavaScript 中的分号(;) – JavaScript 完全手册(2018版)
注:本文为 < JavaScript 完全手册(2018版) >第14节,你可以查看该手册的完整目录. JavaScript 中的分号是可选的. 我个人偏好是我的代码中避免使用分号,但也有 ...
- 更新和插入的并发问题_mysql经典面试题:如何读写分离?主从原理是啥?同步的延时问题...
面试题 你有没有做 MySQL 读写分离?如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题? 考点分析 高并发这个阶段,肯定是需要做读写分离的 ...
- 20道JavaScript经典面试题
该篇文章整理了一些前端经典面试题,附带详解,涉及到JavaScript多方面知识点,满满都是干货-建议收藏阅读 前言 如果这篇文章有帮助到你,❤️关注+点赞❤️鼓励一下作者,文章公众号首发,关注 前端 ...
- 50道 JavaScript 经典面试题汇总篇
web前端教程 用大白话,来讲编程 有很多小伙伴都跟我提过,为什么之前<经典面试题>系列不像<趣味ES6>和<vue基础系列>一样,来个汇总篇呗,免得想看的话要一道 ...
- Web前端经典面试题-JavaScript
Web前端经典面试题-JavaScript 看看银行卡余额,看看工资条,看看房价,动力就来了,大二狗,加油~~ JavaScript 原型链.类.继承.作用域.闭包.js运行机制/单线程.js数据类型 ...
- JavaScript前端经典面试题之ES6面试题汇总es6
推荐阅读: vue3面试题:最新vue3.0前端经典面试试题及答案(持续更新中--)_南北极之间的博客-CSDN博客打包大小减少41%初次渲染快55%, 更新渲染快133%内存减少54%......使 ...
- JavaScript经典面试题 —— 解决循环打印问题
循环打印问题是面试中经典的题目,一般会给出代码,让我们解释原因,并给出若干解决方案. 1. 题目分析 以下代码运行后会打印什么? 答案:6 6 6 6 6 for (var i = 1; i < ...
- 2018最新Web前端经典面试试题及答案
本篇收录了一些面试中经常会遇到的经典面试题以及自己面试过程中遇到的一些问题,并且都给出了我在网上收集的答案.马上就要过春节了,开年就是崭新的一年,相信很多的前端开发者会有一些跳槽的悸动,通过对本篇知识 ...
最新文章
- Tether销毁5亿USDT;BCH将于11月15日硬分叉,SV-Pool已向普通矿工开放
- 将win7电脑变身WiFi热点,让手机、笔记本共享上网
- centos 并发请求数_Linux Shell多进程并发以及并发数控制
- main_loop()函数解析(1)
- php每天扒取当天新闻_php 抓取新浪新闻的程序代码
- 理解MySQL——索引与优化
- HTML输入学生成绩并排序java_JS实现冒泡排序,插入排序和快速排序并排序输出...
- 包含min函数的栈 python_面试题_设计包含 min函数的栈
- LeetCode 6034. 数组的三角和
- 小米不加入鸿蒙,是华为不给小米用鸿蒙,还是小米拒绝使用鸿蒙?
- 关闭或修改 IIS 443 端口
- 取名字_新生婴儿取名字大全2021
- VMware虚拟机通过光盘PE安装GHOSTxp
- Hi3531D调试手记(六):IT6801实现HDMI转码BT1120输入VI
- AndroidStudio之自定义PreferenceScreen
- 【第三方互联】5、网页添加QQ好友及QQ群组
- 站在思想层面看MVX架构
- 支付宝app支付-php
- 经营养生理疗馆要注意什么问题?
- 在使用tr的时候经常遇到的错误1