作用域

es6基础语法

偶尔善良 提交于 2019-12-08 09:00:49
一,es6简介 ECMAScript 是一个标准 ECMAScript 5.1 2011年发布 es6就是es5的下一个版本,2015.6发布es6的第一版 es2015, 2016.6发布es6第二个版本 es2016 ,2017年发布es6第三个版本 es2017 es6 是涵盖了es2015,es2016,es2017等版本 es6 是严格版的es5 html5 和 Xhtml1.0 "use strict"; 二。es6基础语法 1,let es6新增的声明变量的关键字 类似于var 但有所不同 不同: 1)作用域不同 var 声明的变量可以在大括号外调用, let声明的变量只能在代码块内部调用 代码块:我们认为一个大括号可以封闭一个代码块 2)没有变量提升 3)暂时性死区 使用let声明之前的变量都是不可用的 4)不允许重复声明 let不允许在相同作用域内部重复声明同一个变量,所以也是不允许在函数中重新声明参数 2,块级作用域 1)es5只有两个作用域 全局作用域 函数作用域 2)let 为js 增加了块级作用域 3)es6 允许块级作用域嵌套 4)外层作用域无法读取内层作用域的变量 5)内层作用域可以定义与外层作用域的同名变量 6)IIFE被抛弃 7)块级作用域与声明函数 es5 只允许在顶层作用域或函数作用域中声明函数,不能在块级作用域中声明函数 es6 兼容浏览器

python:python基础语法四,函数

試著忘記壹切 提交于 2019-12-08 04:41:21
python基础语法 文章目录 python基础语法 函数简介(function) 函数的参数 不定长的参数 参数的解包(拆包) 返回值 help() 作用域(scope) 命名空间(namespace) 递归 函数式编程 高阶函数 filter()过滤器 匿名函数 lambda 函数表达式 (语法糖) map() sort() sorted() 闭包 装饰器 函数简介(function) - 函数也是一个对象 - 对象是内存中专门用来存储数据的一块区域 - 函数可以用来保存一些可执行的代码,并且可以在需要时,对这些语句进行多次的调用 - 创建函数: def 函数名([形参1,形参2,...形参n]) : 代码块 - 函数名必须要符号标识符的规范 (可以包含字母、数字、下划线、但是不能以数字开头) - 函数中保存的代码不会立即执行,需要调用函数代码才会执行 - 调用函数: 函数对象() - 定义函数一般都是要实现某种功能的 # 比如有如下三行代码,这三行代码是一个完整的功能 # print('Hello') # print('你好') # print('再见') # 定义一个函数 def fn() : print('这是我的第一个函数!') print('hello') print('今天天气真不错!') # 打印fn # print(fn) <function fn at

【译】统一样式语言

淺唱寂寞╮ 提交于 2019-12-08 00:37:19
原文地址: A Unified Styling Language 原文作者:本文已获原作者 Mark Dalgleish 授权 译文出自: 掘金翻译计划 译者: ZhangFe 校对者: JackGit , yifili09 , sunshine940326 , sunui 统一样式语言 在过去几年中,我们见证了 CSS-in-JS 的兴起,尤其是在 React 社区。但它也饱含争议,很多人,尤其是那些已经精通 CSS 的人,对此持怀疑态度。 "为什么有人要在 JS 中写 CSS? 这简直是一个可怕的想法! 但愿他们学过 CSS !" 如果这是你听到 CSS-in-JS 时的反应,那么请阅读下去。我们来看看为什么在 JavaScript 中编写样式并不是一个可怕的想法,以及为什么我认为你应该长期关注这个快速发展的领域。 相互误解的社区 React 社区经常被 CSS 社区误解,反之亦然。对我来说这很有趣,因为我同时混迹于这两个社区。 我从九十年代后期开始学习 HTML,并且从基于表格布局的黑暗时代就开始专职于 CSS。受 CSS 禅意花园 启发,我是最早一批将现有代码向 语义化标签 和层叠样式表迁移的开发者。不久后我开始痴迷于 HTML 和 JavaScript 的分离工作,在服务器渲染出来的页面中使用 非侵入式 JavaScript 同客户端交互。围绕这些实践

对Python中一些“坑”的总结及技巧

痞子三分冷 提交于 2019-12-07 22:04:46
一.赋值即定义 1.运行以下代码会出现报错 #!/usr/bin/env python #_*_conding:utf-8_*_ x = 100 def outer(): def inner(): x += 100    #其实这里等效于"x = x + 100",我们直到这是一个赋值语句,会优先计算右边的等式,即"x + 100".而在此时由于x变量赋值即定义,即此时的x和全局作用域的x并非同一个对象。 print(x) return inner foo = outer() foo() 2.使用global关键字解决以上报错 ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! ''' #!/usr/bin/env python #_*_conding:utf-8_*_ x = 100 def outer(): def inner(): global x         #注意,我们先要在inner作用域中使用全局作用域的同名x变量就得优先使用"global"关键字进行声明。 x += 100 print(x) return inner foo = outer() foo() #以上代码输出结果如下: 200 3.不推荐使用global global总结 x+

深入浅出var let const的区别

自闭症网瘾萝莉.ら 提交于 2019-12-07 16:53:49
在ES6出现之前JavaScript没有块级作用域的概念,这可能使得我们对js的作用域有时候无法理解。下面我们来详细的谈一谈var let const 三者的区别 首先我们看这样一个例子 var a = 10; foo(); //foo是函数 函数声明会提到作用域的最顶部 所以会优先执行该函数 console.log(a); function foo(){ console.log(a); //在foo函数的局部作用域中 变量a在预编译过程中被赋值为:undefined var a = 20; //此时给局部作用域中的a赋值为20 console.log(a); } //输出结果: // undefined //20 //10 一:怎样体现let 的块级作用域 { var a = 100; } console.log(a); // 100 { let b = 200; } console.log(b); // b is not defined 上面的例子很好的说明了var 声明的变量是没有块级作用域的,而let声明的变量有块级作用域。 let 非常适合用于 for 循环内部的块级作用域。JS中的for循环体比较特殊,每次执行都是一个全新的独立的块作用域,用let声明的变量传入到 for循环体的作用域后,不会发生改变,不受外界的影响。 for (var i = 0; i <10; i+

深入理解ES6 - var-let-const

淺唱寂寞╮ 提交于 2019-12-07 16:53:13
知识点 var 声明变量: 1 、存在变量提升,实际上 var 无论在哪里声明,都会被当做当前的作用域顶部声明变量。 2 、可以重复声明,后声明的变量会覆盖前声明的变量。 let 声明变量: 1、不存在变量提升。 2、禁止重复声明。 3、块级作用域,只在当前作用域块有用。 4、临时死区,而且不能在声明之前访问它。 const声明常量: 1 、 const 声明的是常量,其值一旦确定后不可以修改 2 、 const 声明常量时候必须要进行赋值 3 、 const 不存在变量提升,一旦执行快外就会立即销毁。 4 、 const 只能在当前代码块级有效, 5 、 const 不能重复声明相同常量。 6 、 const 声明不允许修改绑定,但允许修改值,也就是说用 const 创建对象后,可以修改该对象的属性值。 一、声明JavaScript的变量有哪些? 每种编程语言都有变量,声明变量的方法各不同,在JavaScript里面,最经典的var声明一个变量,当ECMAScript6出现后,新增了2个声明变量的方法:let和const,那何时创建变量,用什么声明变量方法会更好呢? 二、先谈谈var声明及变量提示(hoisting)机制 var声明一个变量时候,只需要 var name; 或者声明赋值var name = “Bob”; 实际上var无论在哪里声明

ES6系列——let和const深入理解

爱⌒轻易说出口 提交于 2019-12-07 16:52:37
前言 在ES6中多了两个变量定义的操作符——let和const,在现在项目中,ES6已经是不可获缺,我打算在掘金上整理一套ES6的系列,会收集常用的知识点,喜欢的可以点个喜欢,关注,或者可以去 github 点个star ES5没有块级作用域 大家都知道js是没有块级作用域的,我们先了解一下块级作用域。 任何一对花括号中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的 了解定义之后,我们?一个用烂了的例子: for ( var i = 0 ; i < 10 ; i++) { console .log( 1 ); } console .log(i); 复制代码 上面这个例子,最外面会输出10。显而易见,没有块级作用域。 ES5可以怎么创建块级作用域 立即执行函数 关于这一点我们可以看道面试题就能明白。 var func = []; for ( var i = 0 ; i < 10 ; i++) { func.push( function ( ) { console .log(i) }); } func.forEach( ( func ) => { func(); }) //10个10 复制代码 为什么会产生这样的事情呢?因为在循环内部这些i都是用同一个词法作用域的,换言之,这10个i用的都是最后的输出的i,最后的i也就等于10。 而立即执行函数就不一样

var,let和const深入解析(一)

百般思念 提交于 2019-12-07 16:51:47
es6有许多特别棒的特性,你可能对该语言的整体非常熟悉,但是你知道它在内部是如何工作的吗?当我们知道它的内部原理以后,我们使用起来也会更加的安心一些。这里我们想逐步的引导你,让你对其有一个更深入,更浅显的认识。让我们就先从es6中的变量开始讲起吧。 let和const 在es6中新引入了两种方式来申明变量,我们仍然可以使用广为传诵的var变量(然而你不应该继续使用它了,继续阅读来了解其中原因),但是现在我们有了两种更牛的工具去使用:let和const。 let let和var非常的相似,在使用方面,你可以使用完全相同的方式来声明变量,例如: let myNewVariable = 2; var myOldVariable = 3; console.log(myNewVariable); // 2 console.log(myOldVariable); // 3 但是实际上,他们之间有几处明显的不同。他们不仅仅是关键字变了,而且实际上它还让会简化我们的一些工作,防止一些奇怪的bug,其中这些不同点是: let是块状作用域(我将会在文章后面着重讲一下作用域相关的东西),而var是函数作用域。 let不能在定义之前访问该变量(var是可以的,它确实是js世界中许多bug和困扰的源头)。 let不能被重新定义。 在我们讲解这些不同点之前,首先我们看一个更酷的变量:const const

var vs let vs const

强颜欢笑 提交于 2019-12-07 16:51:31
Js 作用域 :全局作用域、函数作用域、块作用域(es6); var let 区别 1、作用域不同: var 函数作用域;let、const 块作用域 相关参考: JS中全局作用域与局部作用域的理解 深入理解js的变量提升和函数提升 /*var 函数作用域 * if、for属于块作用域 */ if(true) { var a = 3;} console.log(a); // 3 for(var i=0; i<4; i++) { var b = 5; }; console.log(i); // 4 console.log(b); // 5 /*let 块作用域*/ if(true) { let a = 3;} console.log(a); // Uncaught ReferenceError: a is not defined for(let i=0; i<4; i++) { var b = 5; }; console.log(i); // Uncaught ReferenceError: i is not defined console.log(b); // 5 2、var 在变量声明之前访问提示 undefined,let 则直接提示 ReferenceError ReferenceError、TypeError:引用错误和类型错误区别 作用域区别

深入理解ES6--块级作用域(let const)

為{幸葍}努か 提交于 2019-12-07 16:51:06
var 声明及变量提升机制 var 的声明提升机制 —> 在函数作用域或全局作用域中通过关键字var 声明的变量,无论实际在哪里声明,都会被当成在当前作用域(ES5作用域,只有函数能起到块级作用域的目的)顶部声明的变量. var 声明的变量会覆盖window的原有对象 var value ; if ( true ){ //可以重复声明 var value = 1 ; } //本应该只作用在if 花括号之内 console.log( value ); //1; var Math = 1 ; //window.Math === Math true ES6 的块级声明 let 声明 1.let 不能重复声明 2.只作用在当前代码块 3.声明的变量不会覆盖window 上面的变量 if ( true ){ let value = 1 ; } console .log(value); // undefined ; let Math = 1 ; // window .Math === Math false /*带来的问题: 当你使用iframe去调用对象的时候.由于 let 声明的变量不在 window 上面, 无法通过iframe调用,所以这种情况需要使用 var 来声明变量 */ const 声明 const表示声明的是常量,和let 一样也是块级作用域 1.const 不能重复声明 2