1、arguements的使用
当不确定有多少个参数传递的时候,可以用arguements来获取。在js中它是当前函数的一个前置对象。所有的函数都内置了一个agruments对象,其包含所有的实参。
1、arguements伪数组,并不是真正意义上的数组
(1)具有数组的length属性
(2)按照索引的方式进行存储
(3)他没有真正数组的一些方法
<script>
function fn() {
for (var i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
}
}
fn(1, 2, 3, 4, 5);
function fn() {
console.log(arguments);//arguements展示形式是伪数组
}
fn(1, 2, 3);
</script>
1.3
函数是可以相互调用的
2、函数的两种声明方式
2.1利用函数关键字自定义(命名函数)
2.2函数表达式(匿名函数)
var fun=function(){
console.log('')
}
fun();
fun是变量名,函数表达式声明方式跟声明变量差不多
<script>
var fun = function (arg) {
console.log('');
console.log(arg);
}
fun('pink老师');
</script>
3、作用域
3.1名字(变量)不总是有效可用的,限定这个名字的代码范围就是这个名字的作用域,其提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字的可行性。
3.2js作用域(es6)之前,全局作用域,局部作用域
全局作用域:整个script标签,或者是一整个单独的js文件
局部作用域(函数作用域)在函数内部就是局部作用域
不在同一作用域互不影响,在同一作用域就近原则
3.3变量
全局变量:在全局作用域下的变量
在函数内部没有声明直接赋值的变量也属于全局变量
局部变量:在局部作用下(函数内部)的变量 ,形参也属于
全局变量,只有浏览器关闭的时候才能销毁,比较占用资源,局部变量,当我们程序执行完毕之后就会销毁,比较节省资源
3.4js没有块级作用域if{}等
es6之后才有
之前
//外面是不能调用num的
<script>
if(3<5){
var num=10;
}
console.log('num');
</script>
4、作用域链:内部函数访问外部函数的变量,采取的是链式查找的方式来决定那个值,这种方式被称为作用域链(就近原则)。
5、js 预解析
js代码是由浏览器中javascript解释器来执行的,其在运行代码的时候会分成两步:预解析和代码执行。
(1)
js引擎会把js里面的所有var(用来定义变量的)和function(用来定义函数的)放到当前作用域的最前面
(2)代码执行 按照代码书写顺序从上到下
6、预解析分为变量预解析(变量提升)和函数预解析(函数提升)
变量提升,就是把所有的变量声明提升到当前作用域的最前面,但不提升赋值
函数提升,就是把所有的函数声明提升到到当前作用域的最前面,不调用函数
7、js对象
一个数据库、一个网页、一个与远程服务器的链接都是“对象”。
js中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等。
对象是由属性和方法组成的
7.1、创造对象的三种方式(object)
(1)利用字面量创建对象
<script>
var object = {
name: 'keke',
type: '阿拉加斯加犬',
year: 5,
color: '棕红色',
jineng: 'bark,showfilm'
}
console.log(object.name);
console.log(object['year']);
console.log(object['year']);
</script>
(2)利用new Object创建对象
<script>
var obj = new Object();
obj.name = '11';
obj.sex = 'nan';
obj.year = '19';
obj.skill = function () {
console.log('影分身术');
}
console.log(obj.name);
console.log(obj.sex);
obj.skill();
</script>
(3)利用构造函数创建对象
<script>
function Wangzhe(name, style, xueliang) {
this.name = name;
this.style = style;
this.xueliang = xueliang;
this.Attack = function (attack) {
console.log(attack);
}
}
var lianpo = new Wangzhe('廉颇', 'strong', 500);
var houyi = new Wangzhe('后羿', 'sheshou', 100);
console.log(lianpo.name);
console.log(lianpo.style);
console.log(lianpo['xueliang']);
lianpo.Attack('近战');
houyi.Attack('远程');
</script>
8、内置对象
JavaScript中对象分为3种:自定义对象、内置对象、浏览器对象
前两种对象是JS基础内容,属于ECMAScript;
内置对象就是指Js语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或者是基本的技能,内置对象·最大的优点就是帮助我们快速开发
js提供多个内置对象:Math、Date、Array、String等
9、MDN
10、Math
//Math数学对象 不是一个构造函数,所以我们不需要new来调用,直接使用里面的方法就可以
console.log(Math.PI);//一个属性 圆周率
console.log(Math.max(1, 99, 3));//最大值
console.log(Math.max(1, 99, 'pink'));
console.log(Math.max());
<script>
var myMath = {
PI: 3.141592653,
max: function () {
var max = arguments[0];
for (var i = 1; i < arguments.length; i++) {
if (arguments[i] > max) {
max = arguments[i];
}
}
return max;
},
min: function () {
var min = arguments[0];
for (var i = 1; i < arguments.length; i++) {
if (arguments[i] < min) {
min = arguments[i];
}
}
return min;
}
}
console.log(myMath.PI);
console.log(myMath.max(1, 4, 8));
console.log(myMath.min(1, 5, 8));
</script>
<script>
//1、绝对值方法
console.log(Math.abs(1));//1
console.log(Math.abs(-1));//1
console.log(Math.abs('-1'));//隐式转换 会把字符型的-1转为数字型的-1
console.log(Math.abs('pink'));//NaN
//2、三个取整方法
//(1)Math.floor()向下取整 往最小了取
console.log(Math.floor(1.1));
console.log(Math.floor(1.9));
//(2)Math.ceil()向上取整 往大了取
console.log(Math.ceil(1.1));
console.log(Math.ceil(1.9));
//(3)Math.round()四舍五入 其他数字都是四舍五入,但是.5特殊往大了取
console.log(Math.round(1.1));
console.log(Math.round(1.6));
console.log(Math.round(-1.1));//-1
console.log(Math.round(-1.5));//-1
</script>
10.2随机数方法 random()
<script>
//1.Math对象随机数方法 random()返回随机的小数0<=x<=1
//2.这个方法里面不跟参数
//3、代码验证
console.log(Math.random());
//4、我们想要得到两个数之间的随机整数 并且包含这两个整数
//Math.floor(Math.random()*(max-min+1)+min);
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
console.log(getRandom(1, 10));
//5.随机点名
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
var arr = ['张三', '李四', '王五', '赵六'];
console.log(arr[getRandom(0, arr.length - 1)]);
console.log(arr[getRandom(1, 4)]);
</script>
11、Date日期对象
Date()日期对象 是一个构造函数 必须使用new 来调用创建我们的日期对象
Date对象和Math对象不一样,他是一个构造函数,所以我们需要实例化后才能使用
Date实例用来处理日期和时间
注意:
1、获取当前的时间必须实例化
2、Date()构造函数的参数
<script>
//1.使用Date 如果没有参数 返回当前系统的当前时间
var date = new Date();
console.log(date);
//2.参数常用的写法 数字型 2019,10,01 字符串型 2019-10-01 8:08:08
var date1 = new Date(2019, 10, 1);
console.log(date1);
var date2 = new Date('2019-10-1 8:8:8');
console.log(date2);
</script>