执行顺序问题 请问console.log输出的值是多少 输出的肯定是1 假如这里有一行未知的代码 会打印出几? 如果这段未知的代码是a=2.那么其实console输出的就是2 只关心代码,没有关心代码执行的顺序,这就是这条面试题最大的陷阱. 最终输出的是 语法问题 i虽然是写在for循环里面,但是它依然是往外跑的 i等于5的时候要执行i++然后进入不到循环里面了.所以当等于6的时候循环内就不成立, 就执行最下面的console的输出 如果这行代码是用户点击的时候去执行的话.那么这行代码就是 最终…
以前的var方式声明不好用 a=1回声明一个全局变量, 输出了1 说明a=1确实声明了一个全局变量. 但是你把放在其他的地方,就不是声明全局变量了. 如果外面有个全局变量a 那么函数里面就是给a赋值 有两层函数的时候,直接使用的是局部变量a,也就是fn函数里面的a 如果当前没有a就声明一个全局变量a.如果有a就利用这个a.下面当前就是有a的 这样用的就是最外面的var a 如果外面也没有,这时候才会去声明一个全局变量 所以a=1会声明一个全局变量是错的,只有在没有a这个变量的情况下才会隐式的去声…
es7语法比较少,只占了一点点 ES 6 新特性一览:https://frankfang.github.io/es-6-tutorials/ 我用了两个月的时间才理解 let   https://zhuanlan.zhihu.com/p/28140450…
其他章节请看: es6 快速入门 系列 变量声明:let和const 试图解决的问题 经典的 var 声明让人迷惑 function demo1(v){ if(v){ var color='red' } console.log(color) } demo(1) // red js引擎会将上面的 demo1 函数修改成下面的样子: function demo2(v){ var color; if(v){ color='red' } ... } 解决方法 将 var 声明改为 let 声明 func…
石川es6课程---3.变量let和常量const 一.总结 一句话总结: let非常好用,尤其是let的块级作用域可以解决之前要(function(){})()立刻执行函数做的块级作用域 1.js中var声明变量会伴随哪些问题? - 可以重复声明,没有报错和警告 - 无法限制修改(也就是没有常量的概念) - 没有块级作用域, { } 2.js中如何实现块级作用域? 函数:普通js只有函数才有作用域(function(){})()立刻执行函数 //普通js只有函数才有作用域(function()…
最近用淘宝的weex做了个项目,最近稍微闲下来了.正好很久没有接触RN了,所以趁这个机会系统的学习一下ES6的相关知识. 孔子说:没有对比就没有伤害.所以我们要拿ES6和ES5好好对比的学习.这样才能明白es6是多少的好,积极的拥抱她! 1.let 用let声明的变量,只会在let命令所在的代码块内有效. let的块状作用域 我们来看一个简单的例子: 'use strict'; { let name = 'cloud'; ; } name;//ReferenceError: name is no…
就是最新的JavaScript 原来的是var,要求不严格,不能限制修改,函数级 es6要求严格 1.防止重复声明 let      变量=var const 常量 2.控制修改 const常量不能修改 3.块级作用域 输出3个i var  function 函数一个按钮一个i(没有function,只有一个值=3) let与上面等价 解构赋值 1.两边结构必须一样 2.右边必须得是个正确写法的东西 3.赋值和解构同时完成(写一起) json={a:12,b:15} let {a,b}=json…
对象语法增强 已经有了个对象的新增语法 还需要一个api来做呢?. 因为有的时候,你需要在旧的对象上添加get.set. 读的时候就走get 写的时候就走set 假设很早之前在项目里写了一个old对象,它的属性都是写好的,现在想给oldObject加get.set.没有办法再去重新定义它 这个api是给已经定好的对象,来不及再去重新定义的对象修改属性, 这样就可以设置oldObject的值为1. 但是set方法里面什么也没做.所以输出oldObject.x的值为undefined 这个api还有…
对象属性的加强: 可以通过new Object(), Object.create()方法,或者使用字面量标记(初始化标记)初始化对象. 一个对象初始化器,由花括号/大括号 ({}) 包含的一个由零个或多个对象属性名和其关联值组成的一个逗号分隔的列表构成. 上面那句话说的是如何产生一个新的对象. 下面代码.a就是一个空对象, 空对象只有一个属性.那就是_proto_ 使用object.create去创建对象,需要传个参数,这里传null.就真的是一个空对象了,里面什么都没有 Object.crea…
ES3里面的写法 匿名函数是用不了的 还是需要给他赋值 选中的这一部分叫做匿名函数 等于号叫做赋值 let xxx叫做声明 所以说这个地方是三个语法,首先声明一个匿名函数,然后声明一个xxx变量,最后把这个匿名函数赋值给这个变量xxx es6箭头函数 箭头函数只能做赋值,不能做声明 这是一个标准的箭头函数 写法2,只有一个参数 如果只有一个函数,可以不用写括号 调用一下做测试 写法3,函数体只有一句话的情况 如果函数体只有一句话,那么是可以不写花括号的. 假设我们的函数体只有return p1+…
ES6新出的关键class BE受雇与网景开发了JS 当我们在写一个对象的时候,我们实际上内存的形式表示. obj等于一个空对象,可以直接toString.它为什么可以有toString window是一个全局的对象. window下有个object的属性. 通过window.Object.prototype找到了toString 为了方便理解,当说原型的时候 先理解为共用属性. toString是很多对象的共用属性. 当谢var obj为一个空对象的时候,为什么可以获取到toString的方法…
回顾 当你声明一个空的对象obj的时候,会生成一块内存这个内存里面什么都没有,自由__proto__存在401的地址. 也就是Object的protototype在内存中的地址 类 通过函数创建类.这就是构造函数的由来. 用函数来创建某一类的对象,这个函数就叫做构造函数. 公有属性和私有属性 class constructor用来构造自有属性. 公有属性     p1的walk和p2的walk是同一个walk 复杂语法 类必须用new去创建. this就是p1这个对象 extends psers…
声明对象原型,公有属性. obj对象,它用一个属性__proto__记录了自己的原型 改掉它的原型为公有属性.那么obj这个对象及有了hi的方法.因为obj自己没有hi.那么就去自己的原型上去找了. obj.hi等价于公有属性.hi.call(obj). obj作为参数传递了过去. obj把自己传给hi.原型里面必须通过this去拿到.this是隐藏的真正的第一参数. oobj对应的this,yyy对应的第二个参数a 用简单的方式 修改了原型,原型上的hi方法输出hi 使用原型来模拟类 同一类对…
杂谈coffeescript 箭头函数抄的是谁? coffeescript 双箭头的形式 箭头函数简洁的语法 数组内每一个值都平方一下 Map的写法 箭头函数的写法 平方后,每一个值再加1 number变量改成用n,更简化 瘦箭头 瘦箭头其实就是function 判断response里面的对象是否存在的情况 coffescript里面的解决方法,直接用问号解决了. vue中说不要使用箭头函数? 因为vue中依赖this 用到了箭头函数就别用this function()简写的写法,onClick…
解答提问 两边都没有构造函数的情况 父类没有构造函数,子类有构造函数的情况 下面用到的了this.body这个属性,所以super()必须要放在这行代码的上面. 在调用this之前必须调用super() 公有属性如果是一个数字,用原型可以,class不行 在原型上加人类的属性 在原型上加上了. 通过class的函数返回字符串来达到想要的效果 get和set 前面加get 调用的时候就可以不用加括号了 p1的race实际上是一个函数. 刚开始写错了,后期想去修正,没法修改.因为你始终是在调用这个函…
var声明变量的作用域限制在其声明位置的上下文中 var x = 0; // x是全局变量,并且赋值为0. console.log(typeof z); // undefined,因为z还不存在. function a() { // 当a被调用时, var y = 2; // y被声明成函数a作用域的变量,然后赋值成2. console.log(x, y); // 0 2 function b() { // 当b被调用时, x = 3; // 全局变量x被赋值为3,不生成全局变量. y = 4;…
H:\BaiDu\ES6深入浅出-wjw ES 6 新特性一览:https://frankfang.github.io/es-6-tutorials/ 我用了两个月的时间才理解 let https://zhuanlan.zhihu.com/p/28140450 1 新版变量声明:let 和 const 3 ES6深入浅出-1 新版变量声明:let 和 const-1.视频 概述 ES6深入浅出-1 新版变量声明:let 和 const-2.视频 let和const ES6深入浅出-1 新版变量声…
/*声明: * 本文内容多为学习借鉴性内容,大部分非原创 * 特别感谢阮一峰的 ECMAScript6 入门,推荐大家学习 */ 一.es5变量声明的不足 1.变量提升和函数声明提升 es5的代码加载顺序是自上而下的但是 var和function(不包含函数表达式)的声明,(不包含赋值),会得到优先加载,加载时提升到作用域的top位置 函数内的变量声明会提升到函数内部代码的顶部,优先运行; 并且变量的值为undefined; (1)栗子1 var time = new Date(); funct…
1.声明变量 在JS当中一个变量的作用域(scope)是程序中定义这个变量的区域.变量分为两类,全局(global)的和局部的.其中全局变量的作用域是全局性的,即在JavaScript代码中,它处处都有定义.而在函数之内声明的变量,就只在函数体内部有定义.它们是局部变量,作用域是局部性的.函数的参数也是局部变量,它们只在函数体内部有定义. 1.1 var变量声明方式 在javascript中var关键字声明变量具有两个特点,第一变量提升(对变量的定义会默认提前至函数开始处),第二变量没有块作用域…
ES6也出来好久了,最近闲来无事就想着吧es6做一个系统的总结,巩固自己的知识,丰富一下博客. 为什么叫ES6 实际上是ECMA的一个打的标准,这个标准是在2015年6月发布的,正式的名字实际是es2015,ecma这个组织规定每年6月份对这个版本进行更新,所以有es2016,es2017,es2018,有的人也称其为es7 es8,当然es6较之前的es5确实做了非常大的更新,对我们开发这也是非常友好 变量的声明 废话不多扯,进入正题, //之前的变量声明是js的var声明列如var a=1…
// es5的语法与es6的语法区别 // var let const console.log(name);//undefine,不会报错,因为变量声明会提到作用域的最前面 var name="aa"; for(var i=1;i<7;i++){ console.log(i); } console.log(i);//8,不会报错因为var声明的变量没有块级作用域 /** * 总结 var 声明的变量,声明语句会提到作用域的最前面,并且没有块级作用域 */ console.log(…
let 与 const 增强变量声明 ES6 新增了let命令,用来声明局部变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效,而且有暂时性死区的约束. 先看个var的常见变量提升的面试题目: 题目1: var a = 99; // 全局变量a f(); // f是函数,虽然定义在调用的后面,但是函数声明会提升到作用域的顶部. console.log(a); // a=>99, 此时是全局变量的a function f() { console.log(a); // 当…
目录 es6中的变量声明 变量的声明 es6中的变量声明 变量的声明 for (var i = 0; i < 5; i++) { console.log(i) } var声明 作用域问题 上面的就是一个简单的for循环语句,在每次循环变量i的时候答应当前i的值.但是在上面的代码基础上加入几行,我们再试试看. for (var i = 0; i < 5; i++) { console.log(i)//0,1,2,3,4 } console.log(i)//5 console.log(window…
es6系列所有文章都是阅读阮一峰老师的<ES6标准入门>(第2版)所做的读书笔记.方便日后查阅相关基础知识. git地址: https://github.com/rainnaZR/es6-study 变量声明方法 es6的变量声明方面包括: let, const, var, function, import, class. let变量声明 不存在变量提升,变量一定要在声明后才能使用,也就是变量声明前,变量都是不可用的. 不允许重复声明. 拥有块级作用域,一个大括号就是一个块级作用域. cons…
ES6是javascript的新特性,今天来说说声明变量 过去我们声明变量,都是一个一个声明,现在有了一种新的声明方式,它可以将一个多个变量同时声明,声明后变量同时存在一个集合中,集合的数据类型是对象(object).使用这种声明方式,可以使我们书写程序的过程中思路更加清晰,可以将同一事件下的所有变量集合起来,可以将相同意义的变量集合起来. 这样的变量声明方式叫做“模式匹配” 之所以叫做模式匹配,是因为等号两边的模式是一样的 var a = 1; var b = 2; var c = 3; 这是…
主要讲的内容 时间充裕的话就讲,模板字面量 默认参数值 首先讲es6之前,我们是怎么做的.例如我们要写一个求和的函数, 请两个参数的和,但是如果有的人就是穿一个参数呢? 那么b没有传值,b的值是多少呢?打印出来就是undefined.NaN就是a+b的值 所以我们要处理b这个参数.b等于b或者是0,这是一个缩写的形式.基本上所有es5的前端都会去这么写,默认参数 上面的一行简写的方式等于下面if else的方式. b赋值b给b有什么用?就是为了形式好看而已.如果b不存在就让他等于0 或的逻辑就是…
ES6)新增加了两个重要的 JavaScript 关键字:let 和 const.以前声明变量时只有一种方式:var,ES6对声明方式进行了扩展,现在可以有三种声明方式了. 1.var:variable的简写,字面意思就是变量. 2.let:let的意思(vt. 允许,让:出租:假设:妨碍:vi. 出租:被承包:n. 障碍:出租屋) 我理解为出租屋.临时的意思.一种临时变量声明方式,既然是临时变量,则该变量的定义.激活以及作用区域也就只在 let 命令所在的代码块内有效. 3.const:常量.…
let 与 var var var声明的变量拥有全局作用域或者局部作用域 在全局中声明变量即为全局变量 在函数中声明变量即为局部变量 而var在使用过程中也逐渐暴露出许多问题 var的几大问题 变量提升 使用var来声明变量会出现变量提升的问题,即在声明变量之前就调用变量 console.log(info);//undefined var info = 10; 出现上面情况其实是非常不好的,因为在声明之前使用的话应该去报出一个错误而不是用一个undefined给这个变量赋值. 这个问题在函数中尤…
这是我 JavaScript 学习过程中遇到的一些容易混淆的地方,趁着有时间,做了一个整理. 变量提升 变量与函数名提升优先级 js 作用域内有变量,这个很好理解,但有一些细节需要注意. console.log(foo); // 函数 function foo(){ console.log("函数声明"); } console.log(foo); // 函数 var foo = "变量"; console.log(foo); // 变量 当变量名与函数名同名,且都提…