作用域

e

不羁岁月 提交于 2019-11-29 17:41:15
Web前端技术由 html、css 和 javascript 三大部分构成,是一个庞大而复杂的技术体系,其复杂程度不低于任何一门后端语言。而我们在学习它的时候往往是先从某一个点切入,然后不断地接触和学习新的知识点,因此对于初学者很难理清楚整个体系的脉络结构。本文将对Web前端知识体系进行简单的梳理,对应的每个知识点点到为止,不作详细介绍。目的是帮助大家审查自己的知识结构是否完善,如有遗漏或不正确的地方,希望共勉。 一、JAVASCRIPT 篇 0、基础语法 Javascript 基础语法包括:变量声明、数据类型、函数、控制语句、内置对象等。 在ES5 中,变量声明有两种方式,分别是 var 和 function ,var 用于声明普通的变量,接收任意类型,function用于声明函数。另外,ES6 新增了 let、const、import 和 class 等四个命令,分别用以声明 普通变量、静态变量、模块 和 类 。 JS数据类型共有六种,分别是 String、Number、Boolean、Null、Undefined 和 Object 等, 另外,ES6新增了 Symbol 类型。其中,Object 是引用类型,其他的都是原始类型(Primitive Type)。 原始类型也称为基本类型或简单类型,因为其占据空间固定,是简单的数据段,为了便于提升变量查询速度,将其存储在栈

函数

不羁的心 提交于 2019-11-29 17:40:28
总结 一、 函数的基本介绍 函数的三要素 :函数的功能,函数的参数,函数的返回值。 DYR原则:全称为Don’t repeat yourself 翻译不重复你自己。 二、 函数的声明方式 字面量声明函数 : 使用function来创建函数, Function 函数名(形式参数){ //函数体 } 函数名:就是我们调用函数时需要书写的标识符 形式参数:简称形参,是调用函数时需要接收的参数 实际参数:简称实参,是调用函数时实际传递过去的参数 示例: function test(name){ console.log("Hello,"+name); } test("xiejie");//Hello,xiejie 函数表达式声明函数 : 使用函数表达式来进行声明, Let 变量 = function( ){ //函数体 } 示例: let test = function(name){ console.log("Hello,"+name); } test("xiejie");//Hello,xiejie 注意:这里的变量并不是函数的名字,一般来讲,我们都是将一个匿 名函数赋值给一个变量,然后通过这个变量来对函数进行调用。 也可以将一个带有名字的函数赋值给一个变量,这样的声明方式被称之为命名式函数表达式; 示例: Let test = function saySth(name){ console

js中的预解析

青春壹個敷衍的年華 提交于 2019-11-29 17:20:27
// 预解析:JavaScript代码的执行是由浏览器中的JavaScript解析器来执行的。 // JavaScript解析器执行JavaScript代码的时候,分为两个过程:预解析过程和代码执行过程 / 预解析过程:1. 把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。 2. 把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用。 3.先提升var,在提升function / var num = 10; fun(); function fun() { console.log(num);//undefined var num = 20; } // 变量的解析 // 把变量名称提前声明 // 变量提升,定义变量的时候,变量的声明会被提升到作用域的最上面,变量的赋值不会提升。 console.log(str1)//undefined var str1=0; console.log(str1)//0 var num = 22; fun2(); function fun2() { console.log(num);//22 //var num = 20; } // 函数提升 JavaScript解析器首先会把当前作用域的函数声明提前到整个作用域的最前面 // 函数和变量的预解析 名称相同 ,函数优先解析 所以显示函数 而不会显示变量 console.log

独自闯荡上海,面试总结2

大兔子大兔子 提交于 2019-11-29 17:06:12
我们接着昨天说,昨天大概说了一些数据类型和原型链以及继承的东西,今天继续说下面的东西。 7.作用域和闭包 说到js面试,三座大山肯定是一个面试官都会问到,三座大山指的是原型和原型链·作用域闭包·异步,这三个我们先说一下第二个----------作用域闭包 相关题目: 说一下变量提升的理解? 说明this的几个使用场景? 10个<a>点击弹出对应序号? 如何理解作用域? 实际开发中闭包的作用? 首先第一个,考察的是你对代码执行上下文的理解,执行上下文比如下面代码: console.log(a); var a=100; 上面代码第一行打印出来肯定是undifind,因为变量执行顺序没有在调用时候定义。在看下面代码: fn("zhangsan"); function fn(name){ age=20; console.log(name,age); var age; } 上面代码执行时候输出的是什么?答案是:zhangsan,20; 为什么上面执行顺序不行,而第二个就可以,答案很简单,就是浏览器在读代码的时候会对函数声明和变量定义读取时候不一样,我具体也说不清,大家可以上网查一下,有花说不出哎,口才不好。。。。。。 变量提升理解就是变量定义和函数声明(注意函数声明和函数表达式不一样) this的相关问题 this用到的场景分为四种: 第一种:作为构造函数执行,代码如下: function

js闭包

风格不统一 提交于 2019-11-29 17:05:49
function foo() { var a = 2; function bar() { console.log( a ); } return bar; } var baz = foo(); baz(); // 2 —— 朋友, 这就是闭包的效果。 函数bar()的词法作用域能够访问foo()的内部作用域,然后我们将bar()函数本身当做一个值类型进行传递, 在这个例子中,我们将bar所引用的函数对象本身当做返回值. 在foo()执行完成之后,其返回值(),也就是内部的bar()函数,复制给变量baz并调用baz(),世纪上只是通过不同的标识符引用调用了内部的函数bar(). bar() 显然可以被正常执行.但是在这个例子中,它在自己定义的词法作用域之外的地方执行. 在foo()执行完之后,通常会期待foo()的整个内部作用域被销毁,因为我们知道引擎,有垃圾回收器来释放不再使用的内存空间. 由于看上去foo()的内容不会再被使用,所以很自然地会考虑对齐进行垃圾回收. 而闭包的神奇之处真在于此,他们阻止这件事情的发生.事实上内部作用域毅然存在,因此没有被回收,谁在使用这个内部作用域,原来是bar()本身. bar()涵盖foo()内部作用域的闭包,使得该作用域能够一直存活,以供bar()之后任何时间进行引用 bar() 毅然会该作用域引用,这个引用就叫做闭包

javascript基础知识之三座大山

天大地大妈咪最大 提交于 2019-11-29 17:01:43
三座大山:1.原型 原型链 2.作用域 闭包 3.异步 单线程 一.原型 原型链 知识点: (1)构造函数 (2)构造函数扩展 (3)原型规则和示例 二.作用域 闭包 知识点: (1)执行上下文 (2)this (3)作用域 (4)作用域链 (5)闭包 三.异步和单线程 知识点: (1)什么是异步 (2)何时需要异步 (3)前端使用异步的场景 (4)单线程 来源: CSDN 作者: Do-what-you 链接: https://blog.csdn.net/u012224296/article/details/78296036

python - - 函数

若如初见. 提交于 2019-11-29 16:52:00
python -- -- 函数 普通函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 函数能提高应用的模块性,和代码的重复利用率。 规则: 以 def 关键词开头,后接函数标识符名称和圆括号 ()。 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。(参数可以没有) 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。 函数名所有都小写 函数内容以冒号起始,并且缩进。 return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。 注意:若定义的函数名在程序前面定义的函数名相同则将程序前面的函数名覆盖 定义方式: def 函数名(参数列表):   函数体 函数调用 你可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。 参数传递 注意:类型属于对象,变量是没有类型的 a=[1,2,3] a="Runoob" 解析: [1,2,3] 是 List 类型,“Runoob” 是 String 类型,而变量 a 是没有类型,她仅仅是一个对象的引用(一个指针),可以是指向 List 类型对象,也可以是指向 String 类型对象。 固定参数 形参 定义函数时,括号里的参数,没有具体值 补充: 形参可以有默认值,调用时,该参数可以不赋值,如果赋值就会覆盖掉默认值

Javascript基础三(函数)

风流意气都作罢 提交于 2019-11-29 16:16:22
函数第一节: 1.函数的概念及作用   函数是由事件驱动的或者当他被调用时可执行的可重复使用的代码块。   具备一点功能的代码段,代码段来实现具体的功能。要想实现一个函数的功能需要对函数进行调用。每写完一个函数就需要在使用时进行调用 2.函数的好处 重复使用 忽略细节 选择执行 3.函数的定义 通过关键字function声明, function fn(){} 其中: function---为声明函数的关键字,指出这是一个函数 fn ------是函数的名称,类似于永来存储函数的变量 () ------为函数的参数,多个参数用 , 隔开 {} ------放置函数体,用于执行时,所要编译的代码段 4.函数的调用 fn(); ----函数名+() 注意: 千万不能丢掉括号;可先尝试理解fn()()()() 5.事件的概念种类和作用 是一种可以被js侦测到的行为 在JS中常见的事件有: 鼠标点击--------onclick 鼠标双击--------ondblclick 页面或图片加载-----onload 鼠标移入--------onmouseover 鼠标离开--------onmouseout 元素获得焦点------onfocus 元素失去焦点------onblur 键盘事件 …… 主要用于和用户产生一定的交互,提高页面或程序的交互性。 事件和函数之间的关系 当触发事件的时候

python---函数

℡╲_俬逩灬. 提交于 2019-11-29 16:15:36
python函数篇 普通函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 函数能提高应用的模块性,和代码的重复利用率。 规则: 以 def 关键词开头,后接函数标识符名称和圆括号 ()。 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。(参数可以没有) 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。 函数名所有都小写 函数内容以冒号起始,并且缩进。 return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。 注意:若定义的函数名在程序前面定义的函数名相同则将程序前面的函数名覆盖 定义方式: def 函数名(参数列表): 函数体 函数调用 你可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。 参数传递 注意:类型属于对象,变量是没有类型的 a=[1,2,3] a="Runoob" 解析: [1,2,3] 是 List 类型,“Runoob” 是 String 类型,而变量 a 是没有类型,她仅仅是一个对象的引用(一个指针),可以是指向 List 类型对象,也可以是指向 String 类型对象。 固定参数 形参 定义函数时,括号里的参数,没有具体值 补充: 形参可以有默认值,调用时,该参数可以不赋值,如果赋值就会覆盖掉默认值 如果形参有默认值

ES6的声明变量的方法:let and const

落花浮王杯 提交于 2019-11-29 16:04:38
let and const ES6六种声明变量的方法 let let的特点: const const的本质 ES6六种声明变量的方法 ES5 只有两种声明变量的方法:var命令和function命令。ES6 除了添加let和const命令外,还有另外两种声明变量的方法:import命令和class命令。所以,ES6 一共有 6 种声明变量的方法。 今天我就介绍let和const命令 let 它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。 for循环的计数器,就很合适使用let命令 var a = []; for (let i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); // 6 变量i是let声明的,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量,所以最后输出的是6。(JavaScript 引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就在上一轮循环的基础上进行计算。) for循环还有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域。 for (let i = 0; i < 3; i++) { let i = 'abc'; console.log(i); } 输出了 3 次abc