es6 形参的陷阱
先看代码:
var x = 1;
function s (a,y = function (){ x = 2 }){
var x = 1;
y();
console.log(x)
}
s();
console.log(x);
问题:写出上述代码的执行时的打印结果?
这是昨天(2017-2-27)面试一家公司时遇到的问题,其实一开始我的想法是,执行s后,y开始执行的时候,就近原则,y中修改的应该是s内部的x,但是很明显是错的。
原因也很简单,就是定义函数时作用域链就已经形成了,而不是执行时生成的,执行时只是在作用域链上添加了一个保存他局部变量的对象,仅此而已。
上述调用s时,相当于 s( , function (){ x = 2 });所以形参是在函数外面定义的,因此y能访问的变量只能是全局的x。
记坑完毕!
(关于原型链可以参考我的博文: 闭包)
es6 形参的陷阱的更多相关文章
- ES6形参默认值
* 形参的默认值----当不传入参数的时候默认使用形参里的默认值 function Point(x = ,y = ) { this.x = x; this.y = y; } //定义一个点的坐标 fu ...
- day 08 函数
函数初始: 什么是函数? 函数:是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段 一个函数封装一个功能. 1,减少重复代码. 2,增加代码的可读性. 函数的结构 def my_len(): ...
- 3.Vue过滤器
1.概念: Vue.js 允许你自定义过滤器,可被用作一些常见文本的格式化,过滤器可以用在两个地方:mustache 插值和 v-bind 表达式.过滤器应该被添加在 JavaScript 表达式的尾 ...
- vue - vue基础/vue核心内容(终结篇)
今天是vue基础.vue核心内容第三天,也是最后一天,后面开始进入组件化学习,整个基础内容以生命周期的结束而结束,不得不说,张天禹把这节课讲活了,开始觉得vue是一个有生命的东西,包括前面所说的很多脏 ...
- es6入门3--箭头函数与形参等属性的拓展
对函数拓展兴趣更大一点,优先看,前面字符串后面再说,那些API居多,会使用能记住部分就好. 一.函数参数可以使用默认值 1.默认值生效条件 在变量的解构赋值就提到了,函数参数可以使用默认值了.正常我们 ...
- ES6里箭头函数的陷阱
ECMAScript 6新增了箭头函数 原来的匿名函数 function(){},现在可以简化成()=>{} 看起来高大上,像C#什么的语法. 但是箭头函数的this对象,不能更改,总是指向函数 ...
- 几个ES6新特性
ES6是JavaScript语言的下一代标准,已经在2015年6月正式发布了,因为ES6的第一个版本是在2015年发布的,所以又称ECMAScript 2015(简称ES2015).本文主要讲述的是E ...
- 揭秘 typedef四用途与两陷阱[转]
自 http://niehan.blog.techweb.com.cn/archives/325.html typedef用来声明一个别名,typedef后面的语法,是一个声明.本来笔者以为这里不会产 ...
- ES6 Features系列:Template Strings & Tagged Template Strings
1. Brief ES6(ECMAScript 6th edition)于2015年7月份发布,虽然各大浏览器仍未全面支持ES6,但我们可以在后端通过Node.js 0.12和io.js,而前端则通过 ...
- 【转】ES6 手册
目录 var 和 let/const 的比较 用块级作用域代替 IIFES 箭头函数 字符串 解构 模块 参数 类 Classes Symbols Maps WeakMaps Promises Gen ...
随机推荐
- Qt音视频开发34-不同库版本不同位数的库和头文件的引用
一.前言 做开发过程中难免遇到需要引入第三方库的时候,而且需要在不同库版本.不同系统.不同位数下都需要.第三方的库版本众多,一般在大版本中的小版本都是兼容的,但是大版本不兼容,比如ffmpeg目前就有 ...
- Qt编写可视化大屏电子看板系统27-模块5负荷分布
一.前言 负荷分布模块包括工序计划负荷.当日负荷.负荷百分比三个子模块,工序计划负荷用表格的形式展示不同工序在不同日期的负荷工作时长,比如组装工序在 2022-02-10 运行了88小时,一般表格显示 ...
- 墨卡托及Web墨卡托投影解析
Google Maps.Virtual Earth等网络地理所使用的地图投影,常被称作Web Mercator(Web墨卡托投影)或Spherical Mercator(球面墨卡托投影),它与常规墨卡 ...
- 使用R语言查询某物种所有通路及通路内的基因
使用R语言查询某物种所有通路及通路内的基因,这里使用Y书的clusterProfiler包. 这里以人类为例查询所有通路及通路内的基因: library(R.utils) R.utils::setOp ...
- Python · MuJoCo | MuJoCo 与 mujoco_py 的版本对应,以及安装 Cython<3
0 系统环境 & 需求 环境:Linux Ubuntu 20.04,Cuda 12.2(?)也可能是 11,我不是很清楚驱动版本- 需求:安装 gym.dm_control.MuJoCo 和 ...
- Java基础总结,超级全的面试题-copy
1. static关键字是什么意思?Java 中是否可以覆盖(override)一个 private 或者是 static 的方法?是否可以在 static 环境中访问非static 变量? stat ...
- uni-app中picker-view(常见的坑)出现选择值与输出的值不一致
今天遇见一个问题,在使用picker-view的时候: 出现我选择的值和输出的值不一致: 经过与官方的demo做对比发现: 官方是实时的将值从组件中向上抛出去: 值是从change事件传递出去的 而我 ...
- DataV过滤器
人才库: return data.filter(function (item) { return item.职级 === ''; }) 区县分析: //一级指标 const t = Object. ...
- 单用户模式启动 CentOS/RHEL 7/8 的三种方法
单用户模式启动 CentOS/RHEL 7/8 的三种方法 单用户模式,也被称为维护模式,超级用户可以在此模式下恢复/修复系统问题. 通常情况下,这类问题在多用户环境中修复不了.系统可以启动但功能 ...
- Luogu P5298 PKUWC2018 Minimax 题解 [ 紫 ] [ 树形 dp ] [ 线段树合并 ] [ 概率 dp ]
Minimax:线段树合并优化 dp 好题. 树形 dp 因为要求出每一个值的出现概率,首先我们可以想到一个很暴力的 dp 式子. 定义 \(dp_{i,j}\) 表示在节点 \(i\) 时,权值 \ ...