文章目录
变量
- 定义变量方式
- let
- var
- const
- function(){} //函数类型
- import
- class
- 命名规范
- 区分大小写
- 驼峰命名
- 关键字保留字
- 运行和输出
- 运行方式:浏览器或NODE
- 输出方式
- console.log();
- alert
- confirm
- prompt
- dir
- table
- 创建过程
- 创建变量
- 创建数据
- 将两者关联
函数 Function
所有函数都具有Function中的实例成员
语法:arguments:在函数中使用,获取该函数调用时,传递的所有参数
arguments是一个类数组(也称为伪数组:没有通过Array构造函数创建的类似于数组结构的对象),伪数组会缺少大量的数组实例方法
arguments数组中的值,会与对应的形参映射
实例成员
- length属性,得到函数形参数量
- apply方法:调用函数,同时指定函数中的this指向,参数以数组传递
- call方法:调用函数,同时指定函数中的this指向,参数以列表传递
- bind方法:得到一个新函数,该函数中的this始终指向指定的值。
通常,可以利用apply、call方法,将某个伪数组转换伪真数组。
命名函数表达式(一般不用)
命名函数表达式的形式是这样的,例如:
var test = function abc(){
document.write('a');
}
他会先定义一个变量,变量里边放入函数,这就是函数表达式。但是命名函数表达式 的变量名会替代函数名的作用,意思就是调用函数你必须 test()才可以,假如你 abc() 就会报错,这个 abc 就不起作用了,但是你输出 test.name 会得到 abc。
匿名函数表达式
既然函数表达式的函数名不起作用了,后来我们就省掉了,例如:
var test = function(){
document.write('a');
}
立即执行函数(匿名函数之自执行函数):
创建一个函数立刻执行
(function(n){...}(100));
注意点:
- 只有表达式才能被执行符号‘()’执行:text(),var text()=fn…(函数表达式)
- 能被执行符号执行的表达式,就成了立即执行函数,这个函数名字就被忽略。
- 一旦形成函数表达式,就无法再通过函数名找到
- 在立即执行函数中,如果该函数有名字,则函数体内所有对这个名字的赋值等操作都无效/无视,且不会提升在window中
- 有函数名的立即执行函数中是可以访问到这个函数的,就像是arguments.callee
形参和实参
函数()里面的是形参,text(a)里面的a是实参。
var test = function(a){
document.write('a');
}
JS不定参
JavaScript 天生不定参,不是说在一个函数里有几个形参就必须有几个实参,不是这 样的,在 JS 里,形参比实参多,可以,实参比形参多,也行。
若形参比实参多,未传值的形参为undefined
若实参比形参多,不影响函数,形参会存在arguments数组里。
形参与arguments的映射规则
形参和 arguments 确实是一个变一个跟着变的,确实有这样的绑定规则,但是,他俩不是同一个变量,系统内部有映射规则,就是这俩我变你也得变,但是他们是两个变量。
return
- return 的第一个作用就是终止函数。
- return 的第二点作用就是返回值。
递归
其实递归就是一种找规律和找出口的方法,他特别符合人的思维过程。
+ 1.找规律
+ 2.找出口
//n的阶乘
function mul(n){
//出口
if(n==1||n==0){
return 1;
}
retutn n*mul(n-1);
}
imply global 暗示全局变量:
即任何变量,如果变量未经声明就赋值,此变量就为全局变量所有。
es5.0严格模式
当启用es5.0严格模式时,es3.0和es5.0产生冲突的部分就使用es5.0方法,否则会使用es3.0方法
启动
在JS代码最上方写:“use strict”;
用法
- 全局严格模式:在js代码最上方写时,是全局es5.0严格模式
- 局部函数内严格模式(推荐):也可以写在方法里面,必须是方法里面的第一行,这样是局部es5.0严格模式
特点
- 不支持with()、arguments.callee、func.caller
- 变量赋值前必须声明
- 局部this必须被赋值(Person.call(null/undefined)赋值什么就是什么)
- 拒绝重复属性和参数