class 用法 函数变量的作用域
函数变量的作用域
1. 函数体内声明的变量
2. 参数中的变量
没有赋值的 function fn(a){}
赋值的,值不是变量 function fn(a=45){}
赋的值为变量 function fn(a=m){}
参数执行的时候,先给形参赋值,形参也是私有变量,如果给形参赋的值也是变量,先看这个变量是不是私有的(不是针对函数体内,只针对形参,还跟形参的顺序有关),是私有的直接使用,
如果不是私有的,变量找全局的,如果全局没有报错
注意:给形参的赋的变量于形参同名 function fn(a=a) 会出现暂时性死区 因为:形参没有变量提升
class 类的由来
class 的作用:
1. 定义类的
2. 没有变量提升
案例:
class Person{
constructor(){
// constructor 的作用:添加的私有属性 都在这里
}
fn(){
// 默认原型上的属性都在这里
}
static mn(){
// 类上面的方法 需要通过 static 来定义;对象访问不到的方法
}
}
注意: 用类 class 上必须写 constructor
class
1. 在 class 类 添加的属性都是在 原型 prototype 上添加的
2. new 实例的时候,其实就是调用构造函数这个方法
3. 类的本质,就是一个函数
4. 类中的 this 指向实例对象
5. 添加的私有属性都在构造函数中 constructor 添加
6. 每个构造方法都会默认返回实例对象 this ,如果人为改变 return ,返回值返回的基本数据类型,如 字符串、数字等不会改变,如果返回的是引用数据类型,那么return this 就会失效,
变成的你的返回结果
7. 静态的方法,在方法名前面加上 static 关键字,那么这个方法就变成类的私有方法,就得用 类.方法()
继承:extends
子类可以继承父类,使用 extends 关键字
代码块需要使用 super 关键字
constructor 子类构造函数第一行,必须是 super(),super 关键字,在构造函数里面,代表父类构造函数,
如果在原型函数里,super 代表父类的原型
在静态方法中,super 代表父类本身;
案例:
class Person{
constructor(){}
fn(){}
static mn(){}
}
class Son extends Person{
constructor(){
super() //必须调用,代表
}
fn(){
super // 代表父类原型的方法
}
static mn(){
super // 代表父类的私有方法 用 static 定义的方法
}
}
如果 子类构造函数 不使用 super() 那么他的构造函数里的 this 不起作用,子类的 this 要通过父类的构造函数进行塑造;
所以,在子类的 constructor 使用 this 前,一定要调用 super()
supper 既可以充当函数,又可以充当对象;
充当函数时,只能在子类构造函数中使用,且必须放在第一行调用,指向父类构造函数
充当对象中
放在普通函数中,super 指向父类的原型
放在静态方法中,super 执行当前父类本身
只有 super 调用之后,子类才可以使用 this 关键字,指向子类的实例对象;
module (es6 模块设计思想,尽量保持静态化)
es6 使用 export 对外暴露接口
使用 iimport 引入其他模块
import 声明的变量,必须放在 {} 内,变量名必须和暴露的接口名一致;
exprot var a="hello world" (不建议)
var a="hello world"; exprot {a} (建议)
引入接口
import {a} from "文件名"
暴露多个变量,必须加 {}
模块文件暴露什么,引入文件接收什么 (例如:export {a} 为一个对象,那么 import {a} from "文件名" 的 a 就是一个对象)
注意:
export 暴露必须是一个变量,或变量集合
不能直接暴露一个数据,例如:export 12 这种写法就是错的
如果不想让别人知道你暴露的什么接口,我们可以使用 as 关键字
案例:
var a = "hello world";
export {a as ben}; ben 和 a 都 代表了这个字符串
import {ben} from "文件名"
console.log(ben); // hello world
export default 介绍
案例:
a.js
var a="hello world"
export default a;
b.js
import haha from "a.js";
console.log(haha) //hello world;
总结:
export 和 import 时一对,二者后面都必须带 {} ,花括号里面的变量名,保持一致
export default 和 import 也是一对,二者后面不用带 {} ,名字不需要一致;
export default 一次只能对外输出一个
exprot default 本质是将值赋给变量 default ,所以,default 后面不能对变量在次声明;
export default var a x 这种写法错的
export default function fn v 这种写法可以
export default 的本质:
export {a as default} default 可以是任何变量,所以便能实现 export default
class 用法 函数变量的作用域的更多相关文章
- shell中脚本变量和函数变量的作用域
http://blog.csdn.net/ltx19860420/article/details/5570902 1. shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到she ...
- [Z] Shell中脚本变量和函数变量的作用域
在shell中定义函数可以使代码模块化,便于复用代码.不过脚本本身的变量和函数的变量的作用域问题可能令你费解,在这里梳理一下这个问题. (1)Shell脚本中定义的变量是global的,其作用域从被定 ...
- JavaScript 基础(五) 函数 变量和作用域
函数定义和调用 定义函数,在JavaScript中,定义函数的方式如下: function abs(x){ if(x >=0){ return x; }else{ return -x; } } ...
- 18)PHP,可变函数,匿名函数 变量的作用域
(1)可变函数: 可变函数,就是函数名“可变”——其实跟可变变量一样的道理. $str1 = “f1”; //只是一个字符串,内容为”f1” $v1 = $str1(3, 4); //形式上看 ...
- Shell脚本中变量和函数变量的作用域
(1)Shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止.(2)Shell函数定义的变量默认是global的,其作用域从“函数被调用时执行变 ...
- Js中变量的作用域
一.理解函数作用域需要理解以下几点: 1.函数变量的作用域有全局变量和局部变量两种,全局变量写在函数的最前面,局部变量写在函数体内,局部变量省略了var 也就默认成为了全局变量! 2.函数 ...
- Python 学习 第七篇:函数1(定义、调用和变量的作用域)
函数是把一些语句集合在一起的程序结构,用于把复杂的流程细分成不同的组件,能够减少代码的冗余.代码的复用和修改代码的代价. 函数可以0个.1个或多个参数,向函数传递参数,可以控制函数的流程.函数还可以返 ...
- javascript 函数初探 (三)--- javascript 变量的作用域
javascript 变量的作用域: 这是一个至关重要的问题.特别是当我们从别的语言转向javascript时,必须要明白一点,即在javascript中,变量的定义并不是以代码块作为作用域的,而是以 ...
- JavaScript变量的作用域和函数的作用域的区别
变量作用域和函数作用域都涉及到变量值的变化,本文旨在让大家明白他们之间的区别 变量的作用域: 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接 ...
随机推荐
- Codeforces 1215C. Swap Letters
传送门 好像是个挺显然的贪心 首先每次交换当然要尽量一次交换就多两个相同的位置 即 优先把 $\begin{bmatrix}a\\ b\end{bmatrix}$ 和 $\begin{bmatrix} ...
- vue组件之间通信的8种方式
对于vue来说,组件之间的消息传递是非常重要的,下面是我对组件之间消息传递的常用方式的总结. props和$emit(常用) $attrs和$listeners 中央事件总线(非父子组件间通信) v- ...
- redis之使用场景
随着数据量的增长,MySQL 已经满足不了大型互联网类应用的需求.因此,Redis 基于内存存储数据,可以极大的提高查询性能,对产品在架构上很好的补充.在某些场景下,可以充分的利用 Redis 的特性 ...
- NoSQL与其常见的产品
一. 什么是NoSQL NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL",它是一种非关系型数据库. 二. 为什么要有NoSQL 在现代的计算系统上每 ...
- git上传文件夹报错: ! [rejected] master -> master (fetch first) error: failed to push some refs to 'https://github.com/taminachen/rjxm.git' hint: Updates were rejected because the remote contains work
使用git上传本地文件夹到远程仓库,使用如下命令:git push -u origin master时报错 原因是在GitHub创建仓库时创建了readme文件,但是本地没有这个文件,造成本地目录与远 ...
- PAT Basic 1029 旧键盘 (20 分)
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及实际被输入的文字,请你列出肯定坏掉的那些键. 输入格式: 输入在 2 行中分别给出应该输入的文字.以及 ...
- linux打印彩色输出
在终端生成彩色输出,我们可以使用转义序列来实现. 每种颜色都有对应的颜色码.比如:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37 要打印彩色文 ...
- Gcd HDU - 6545 (基础数论)
wls 有一个整数 n,他想将 1 − n 这 n 个数字分成两组,每一组至少有一个数,并且使得两组数字的和的最大公约数最大,请输出最大的最大公约数. Input 输入一行一个整数 n. 2 ≤ n ...
- mysql 的主从
MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对MySQL有更高性能.更高可靠性要求的场合.与之对应的是另一个同步技术是MySQ ...
- Codeforces 980 并查集/模拟贪心最小字典序 找规律/数去除完全平方因子 逆思维倍增预处理祖先标记点
A /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define pb push_bac ...