作用域

JavaScript面试题

好久不见. 提交于 2019-11-28 14:32:24
JS相关问题 数组去重 function uniq(array){ var temp = []; //一个新的临时数组 for(var i = 0; i < array.length; i++){ if(temp.indexOf(array[i]) == -1){ temp.push(array[i]); } } return temp; } var aa = [1,2,2,4,9,6,7,5,2,3,5,6,5]; console.log(aa) console.log(uniq(aa)) 1、谈一谈JavaScript作用域链 当执行一段JavaScript代码(全局代码或函数)时,JavaScript引擎会创建一个作用域又称为执行上下文(Execution Context),在页面加载后会首先创建一个全局的作用域,然后每执行一个函数,会建立一个对应的作用域,从而形成一条作用域链。每个作用域都有一条对应的作用域链,链头是全局作用域,链尾是当前函数作用域。 作用域链的作用是用于解析标识符,当函数被创建时(不是执行),会将this,arguments,命名参数和该函数中所有局部变量添加到该当前作用域中,当JavaScript需要查找变量X的时候(这个过程称为变量解析),它首先会从作用域链中的链尾也就是当前作用域进行查找是否有X属性,如果没有找到就顺着作用域链继续查找,直到查找到链头

第三节课总结

被刻印的时光 ゝ 提交于 2019-11-28 13:51:55
2.2.2 变量的数据类型 基本数据类型:数值型(整数类型,浮点类型) 字符型 布尔型 引用数据类型:类 接口 数组 枚举 注解 2.2.3变量的类型转换 1.自动类型转换 指的是两种数据类型在转换的过程中不需要显式的进行声明 2.强制类型转换 指的是两种数据类型在转换的过程中需要显式的进行声明 2.2.4 变量的作用域 public static void main(string[] args){ int x=4 {int y=9--------------以下括号内的是y的作用域 。 。 。 } 。x的作用域 。 。 } 2.2.5运算符 算数运算符( + -) + - / % ++ 赋值运算符 = += -= = /= %= 比较运算符 逻辑运算符 位运算符 来源: 51CTO 作者: wx5db39f8c13594 链接: https://blog.51cto.com/14589602/2449246

Javascript 作用域的特点

邮差的信 提交于 2019-11-28 13:21:40
作用域的特点 作用域的机制 作用域是针对变量的起作用的范围。 而变量又分为“使用变量”和“赋值变量” 使用变量 又叫做访问变量 出现在表达式中,赋值语句右侧。 访问变量规则: 当访问变量的时候,会先查看当前作用域中是否存在该变量,如果有,就使用。如果没有,就将会向上一层级作用域中寻找。依次向上,直到找到,或者到了全局作用域中还没有找到,就会报错。 赋值变量 也叫做修改变量 只出现在赋值语句左侧 赋值变量规则: 当对一个变量进行赋值的时候,会先查看当前作用域中是否存在该变量,如果有,就赋值。如果没有,就向上一层级查找。依次向上,直到找到,或者到了全局作用域中还没有找到,就会在全局作用域中悄悄的声明这个变量并赋值。 千万不要使用这个特点 切记,切忌。 // 当前是全局作用域 var num = 100; // 在全局作用域中定义的变量 // 定义一个函数 function demo() { var num = 101; // 这是在函数作用域中定义的变量 console.log(num); } // 执行函数 demo(); // 101 解释: 当在函数内部访问变量num的时候,先看当前作用域中是否有num 找到了! 于是就用101 输出101 var num = 100; // 在全局作用域中定义的变量 // 定义一个函数 function demo() { // var num;

对于成员变量和方法的作用域

此生再无相见时 提交于 2019-11-28 13:01:08
对于成员变量和方法的作用域,公共,保护,私有以及不写之间的区别。 public:表明该成员变量或者方法是对所有类或者对象都是可见的,所有类或者对象都可以直接访问 私人:表明该成员变量或者方法是私有的,只有当前类对其具有访问权限,除此之外其他类或者对象都没有访问权限子类也没有访问权限。 保护:表明成员变量或者方法对类自身,与同在一个包中的其他类可见,其他包下的类不可访问,除非是他的子类 默认:表明该成员变量或者方法只有自己和其位于同一个包的内可见,其他包内的类不能访问,即便是它的子类 来源: https://www.cnblogs.com/lujiahua/p/11408098.html

作用域和闭包(一)

£可爱£侵袭症+ 提交于 2019-11-28 12:56:06
作用域和闭包(一) 一、 作用域是什么?   1、概念:设计好一套规则来存储变量,并且之后可以方便找到这些变量。(并且之后对这个值可以进行访问和修改。)   2、传统编译语言流程:程序中的源代码在执行之前,会经历以下三个步骤,统称为“编译”;    (1)分词/词法分析。(这个·过程会将由字符组成的字符串分解成(对编程语言来说)有意义的代码块,这些代码块被称为词法单元。)       例:var a = 2; //被分解成 var、a、=、2、;这些词法单元。(空格是否被当作词法单元,却决于它在语言中的意义);    (2)解析/语法分析。    (3)代码生成。       概念:将AST转换为可执行代码的过程称为代码生成。(就是将var a = 2;的AST转化为一组机器指令,用来创建一个a的变量并将一个值·存储在a中。)        任何JavaScript代码在执行之前都要进行编译    3、理解作用域     (1)对var a = 2;进行处理的三大成员       引 擎:从头到尾负责整个JavaScript程序的编译和执行过程。       编译器:负责语法分析及代码生成。       作用域:负责收集并维护由所有生命的标识符(变量)组成的一系列查询,并实施一套非常严厉的规则,确定当前执行的代码对这些标识符的访问权限。     (2)编译处理过程。      

JavaScript基础语法

孤人 提交于 2019-11-28 12:48:49
JavaScript基础语法。 一、标识符 硬性要求 1) 可以是由数字、字母、下划线和美元符号组成,不允许包含其他特殊符号。 2) 不能以数字开头。 3) 禁止使用JavaScript中的关键词和保留字来进行命名。 4) 严格区分大小写。 二、命名的方法 匈牙利命名法 其特点是标识符的名字以一个或者多个小写的字母开头,表示该变量的数据类型。 数据类型 对应前缀 Array数组 a Boolean布尔 b Float浮点 f Function fn Interger(int)整型 i Object对象 o Regular Expression正则 re String字符串 s 驼峰命名法 驼峰命名法分为两种,一种是大驼峰,另外一种为小驼峰。 1) 大驼峰又被称之为帕斯卡命名法,就是每个单词的首字母都是大写, 如:UserName 2) 小驼峰和大驼峰的区别在于,小驼峰第一个单词首字母为小写,第二个单词首字母为小写。 如:userName 蛇形命名法 其特点在于单词与单词之间使用下划线进行分隔。 如:user_name 三、关键字和保留字 关键字可用于表示控制语句的开始和结束或者用于执行特定操作,关键字是语言本身所保留的,不能用作标识符。 保留字还没有任何特定的用途,但在将来可能会被用作关键字。 JavaScript中的关键字与保留字有: abstract、await、boolean

javascript-类型、值和变量

筅森魡賤 提交于 2019-11-28 12:23:22
基本类型和引用类型 MDN-JavaScript 数据类型和数据结构 ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值。基本类型值指的是 简单的数据段,而引用类型值指那些可能由多个值构成的对象。 其中基本类型是按值访问的,可以操作保存在变量中的实际的值: undefined 、 null 、 number 、 boolean 、 string 、 symbol (es6新增)、 BigInt (提案阶段); 引用类型是保存在内存中的对象,引用类型的值是按引用访问的: Function 、 Object ( Array 、 Date 、 RegExp ) !> 除 Object 以外的所有类型都是不可变的(值本身无法被改变),我们称这些类型的值为“原始值”。 graph LR reference_type --> Object subgraph 栈区 reference_type[Object类型引用地址] Undefined Null Number Boolean String Symbol BigInt end subgraph 堆区 Object[引用类型值] end 类型检测 typeof 类型 举例 Null typeof(null) => object Number typeof(1) => number Boolean typeof

python — 函数基础知识(二)

这一生的挚爱 提交于 2019-11-28 10:17:39
目录 1 返回值 2 作用域 3 函数小高级 4 函数中高级 1 返回值 def func(arg): # .... return 9 # 返回值为9 默认:return None val = func('adsfadsf') # 1. 让用户输入一段字符串,计算字符串中有多少A字符的个数。有多少个就在文件a.txt中写多少个“李邵奇”。 def get_char_count(data): sum_counter = 0 for i in data: if i == 'A': sum_counter += 1 return sum_counter def write_file(line): if len(line) == 0: return False # 函数执行过程中,一旦遇到return,则停止函数的执行。 with open('a.txt',mode='w',encoding='utf-8') as f: f.write(line) return True content = input('请输入:') counter = get_char_count(content) write_data = "李邵奇" * counter status = write_file(write_data) if status: print('写入成功') else: print('写入失败

ES6学习笔记之块级作用域

邮差的信 提交于 2019-11-28 10:07:30
ES6学习笔记:块级作用域 作用域分类 全局作用域 局部作用域 块级作用域 全局作用域示例 var i=2; for (var i = 0; i < 10; i++) { } console.log(i);//10 这里就出现了意料之外的结果,此种原因是变量提升造成过的 局部作用域示例 !(function () { console.log(b);//undefined var b = 2; })() 为什么会输出undefined,而不是报错? 此种也是变量提升造成的意料之外的结果,上面代码等同于下面. !(function () { var b; console.log(b);//undefined b=2; })() 这里就抛出来了一个问题, 什么是变量提升 ? JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。 JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。 ES6中引入了块级作用域的概念 //块级作用域使用方式 { //...code } 注意:使用 var 声明变量 不受块级作用域限制,依旧会造成的变量提升,因此 引入了两个新的变量 let 用法:声明一个变量 特点: 只在声明的代码块有效 在同一作用域中不能重复声明 没有变量提升 暂时性死区 const 用法:声明一个只读变量(可理解为常量) 特点:跟let一致 注意事项

JavaScript的变量:变量提升

ε祈祈猫儿з 提交于 2019-11-28 09:58:56
JavaScript代码的运行规则 在 JavaScript代码运行之前其实是有一个编译阶段的。编译之后才是从上到下,一行一行解释执行。这样一来也给初学者造成很大的误解。 初学者会觉得JavaScript的代码是从上到下,一行一行的解释执行的 。按这样的思路,在有些情况下就会造成惨案: 1 name = "W3cplus"; 2 var name; 3 console.log(name);   按照代码从上到下一行一行解释执行的说法,有些同学可能会觉得 console.log(name) 输出的值是 undefined 。那是因为 name = "W3cplus" 在 var name 之前,变量 name 被重新定义了,而且没有给其赋值,所以认为此时 name 的值是 undefined 。输出的也应该是 undefined 。 但事实上输出的值是 "W3cplus" 。下图是Chrome浏览器调试器下的输出结果:======================>> // >-< \\ 再来看一段代码: ================ >> console.log(name); var name = "W3cplus";      当初我就以为它输出的结果是 Uncaught ReferenceError: name is not defined(…) 。因为变量 name