一、函数的作用域
在函数 内部定义的变量,只能在函数的内部声明。
作用域链(自身—父级—上级)
例1(无形参)
var a=10;
function fn(){
a=20;
}
console.log(a);
fn();
console.log(a);
例2(有形参)
var a=10;
function fn(a){
//var a=undefined;
a=20;
}
fn();
console.log(a);
//结果为10
例3
var a=10; //a=30;
var fn=function(){ //向外层找a的声明,找到全局变量
a=30; //a=30;
var fn2()=function(a){ //系统声明var a 并将a赋值为30;
console.log(a); //30
a=40;
console.log(a); //40
}
fn2(a); //a的值此时为30,然后调用fn2()函数
console.log(a); //30
};
fn();
console.log(a); //30
//结果为30,40,30,30
补充:※※函数提升,把函数定义的时机,放在当前作用域的开头。(在 js中只有函数才产生作用域,而if,while,for其他语句,都不会产生作用域)
当2个函数处于同等级的情况下。
var a=1;
var fn1=function(){
var a=10;
};
var fn2=function(){
console.log(a); //向外层找a的声明。跳过同等级的
};
fn1();
fn2();
//结果为1
变量提升:在声明变量时2,会把当前变量声明的时机放在当前作用域的开头。(只有变量的声明才有提升,变量的赋值没有提升)
console.log(a);
var a=10; //等同于var a; a=10; 其中var a;变量提升。
//结果为undefined
二、对象
一堆无先后顺序的数据的集合*(每个数据都要取名,即属性名)
属性名的命名规则,比较宽松。
var obj={
name:'Bob',
age:20,
gender:'man',
123:false,
'test+test':'hello'
};
console.log(obj);
//输出结果为:object{name:'BOb',age:20,gender:'man',123:false,test+test:'hello'}
console.log(obj.name); //第一种取值方式
//输出结果为:Bob
console.log(obj.age); //第一种取值方式
//输出结果为:20
console.log(obj['name']); //第二种取值方式,当属性名命名是比较宽松的命名方式时,采取。比如使用数字开头,或者属性名中间出现了一些符号。
console.log(obj['123']);
//输出结果为:false
console.log(obj['test+test']);
//输出结果为:hello
取对象的2种方式:点和方括号——一般情况推荐使用点的方式(代码更紧凑)
区别:
1、点会把后面的名称直接作为属性名,而方括号会把返回值作为属性名。2、对于一些特殊的属性名,比如使用数字开头,或者属性名中间出现了一些符号。这些属性职能通过方括号的方式取。
用对象将数据中最大的,最小的都返回出来(将多项数据组合在一起输出)
function fn(a,b,c){
var arr=[a,b,c];
//使用冒泡法比较数组的大小
for(var i=0,i<arr.length-1;i++){
for(var j=0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
//定义新的变量
var tempt=arr[j];
//交换位置
arr[j]=arr[j+1];
arr[j+1]=tempt;
}
}
}
var min=arr[0];
var max=arr[2];
//定义对象,将最大,最小值写入
var obj={
min=min,
max=max
};
console.log(obj);
}
数组与对象的区别(数组有长度,并且长度会随着变化。而对象没有长度概念之说。)
通过new创建数组(缺点,比较麻烦,不够直观)
//第一种方式
var arr=new Array();
arr[0]=1;
arr[1]=2;
arr[2]=3;
console.log(arr);
//结果为:[1,2,3]
//第二种方式
var arr=new Array(5);
arr[0]=1;
arr[1]=2;
arr[2]=3;
arr[5]=6;
console.log(arr);
console.log(arr.length);
//结果为[1,2,3,5:6]
//6
//第三种方式
var arr=new Array(1,2,3);
console.log(arr);
console.log(arr.length);
//结果为[1,2,3]
//3
//第4种方式-数组字面量方式
var arr=[1,2,3]
//总结;如果没有特殊情况,建议使用第4种方式。
数组类型的方法
concat()方法:首尾连接作用
var arr=[1,2,3];
var arr2=[10,20];
var arr3=[30,40];
var result=arr.concat(arr2,arr3);
console.log(result);
//结果为:[1,2,3,10,20,30,40]
join()方法:将数组的每一项拼接到一起,结果为字符串
var arr=[1,2,3];
var result=arr.join(); //默认情况下为,号
console.log(result);
//结果为:1,2,3
var arr=[1,2,3];
var result=arr.join(''); //连在一起的情况
console.log(result);
//结果为:123
var arr=[1,2,3];
var result=arr.join(' '); //中间有一个空格
console.log(result);
//结果为:1 2 3
var arr=[1,2,3];
var result=arr.join('+'); //中间的连接符号为+
console.log(result);
//结果为:1+2+3
pop()方法:删除最后一项,且返回值为最后一项。
var arr=[1,2,3,5];
var result=arr.pop(); //删除最后一项
console.log(result); //返回值为最后一项
console.log(arr);
//输出结果为:5
// [1,2,3]
push()方法:添加一项,并且将数组的长度改变。增加一项。也可以同时添加多项,并用,号隔开。
var arr=[1,2,3,5];
var result=arr.push('hello','js');
console.log(result); //返回值为新的数组的长度
console.log(arr);
//结果为:6
// [1,2,3,5,'hello','js']
reverse()方法:将数组里面的数据颠倒顺序。并且原数组也会跟着变化
var arr=[1,2,3,4,5];
var result=arr.reverse();
console.log(arr);
console.log(result);
//结果为:[5,4,3,2,1]
// [5,4,3,2,1]
shift()方法:删除并返回数组的第一个元素
var arr=[1,2,3,4,5];
var result=arr.shift();
console.log(arr);
console.log(result);
//结果为:[2,3,4,5]
// [1]
slice()方法:截取数组的片段
var arr=[1,2,3,hello,4,5,js];
var result=arr.slice(3,6); //注意结束取值,不包含end元素;当star或者end为负数时,则从右向左数。(负数的写法只能在slice中使用)
console.log(arr);
console.log(result);
//结果为:[1,2,3,hello,4,5,js]
// [hello,4,5]
sort()对数组中的元素进行排序,(从小到大排序,注意,只能对首个字符进行排序)
var arr=[2,1,3,7,4];
arr.sort();
console.log(arr);
//结果为:[1,2,3,4,7]
var arr=[23,1,300,7,4];
//定义排序规则的函数
function rule(a,b){
if(a<b){
//如果要让a出现在b之前,返回小于0的数
return -1;
}else{
return 1;
}
//可以将以上的if语句 写为 return a-b;
}
arr.sort(rule);
console.log(arr);
//结果为:[1,4,7,23,300]
splice()删除元素,并向元素添加新的项目,返回值为被删除的项(用于删除中间的项目)
//删除作用
var arr=[23,1,300,7,4];
var result=arr.splice(2,1); //()前面那个代表被删除的项处于的某一项,后面那个为需要删除多少项,返回值为被删除的内容。
console.log(arr);
console.log(result);
//结果为:[23,1,7,4]
// [300,7]
//替换作用
var arr=[23,1,300,7,4];
var result=arr.splice(2,1,100,200); //添加的个数不限
console.log(arr);
//结果为:[23,1,100,200,7,4]
//插入功能
var arr=[23,1,300,7,4];
var result=arr.splice(3,0,100,200); //替换的内容为()中定义的第一个数字的的位置
console.log(arr);
//结果为:[23,1,300,100,200,7,4]