js高级

90 阅读3分钟

三、函数

作用域:起作用的范围

全局作用域:在函数外,使用var声明的变量,可以在任何的作用域下访问到,称为全局变量。

JS程序执行前,会将var声明的变量提升到所在作用域的最前边,赋值不提升。

函数作用域:在函数内,使用var声明的变量,只能在当前的作用域下访问到,称为局部变量。

JS程序执行前,会将function关键字创建的函数提升到所在作用域的最前边,会整体提升。

1.匿名函数

没有名字的函数

function (){}
复制代码
1)创建函数
//函数声明 fn为函数名
function fn(){}
//函数表达式 fun为函数名
var fun=function(){}
//方法调用
fn();
fun();
复制代码

函数表达式和函数声明区别

函数声明创建的函数整体会提升,可以先调用再创建

函数表达式创建的函数只存在变量的提升,必须先创建再调用

2)匿名函数调用

全局污染:全局变量的出现所造成的

解决:尽量避免使用全局变量,转为局部变量

( function(a){ 
  //函数作用域
  //放置每块功能代码
} )(1);
复制代码
3)回调函数
function ran(daizi){
    console.log('你好');
    daizi();
}
function dong(){
    console.log('我不好');
}
ran(dong);
/*
你好
我不好
*/ 
/*
ran(dong)使得两个function连在一起
ran(中间可以添加function)
*/
复制代码

2.全局函数

Number()/parseInt()/parseFloat()

isNaN() 检测一个值是否为NaN,先隐式转换为数值,然后检测是-true 不是-false

isFinite() 检测一个值是否为有限值 是-true 不是-false

0做除数会出现无限值 Infinity

eval() 执行字符串中的表达式

3.对象

1)JS中的对象

自定义对象,用户创建的对象

内置对象,JS提供的对象

宿主对象,根据不同的执行环境划分

2)创建自定义对象

对象字面量

内置构造函数

自定义构造函数

3)使用对象字面量创建对象
var emp={ 属性名1:属性值1, 属性名2:属性值2 }
var emp={
    name:'mike',
    age:12,
    from:'US'
}
console.log(emp);
//{ name: 'mike', age: 12, from: 'US' }
复制代码
4)访问对象中的属性

对象.属性名

对象['属性名']

如果属性名不存在,则返回undefined

如果属性名中含有特殊字符只能使用中括号形式

var emp={
    name:'mike',
    age:12,
    from:'US'
}
emp['age']:13;
console.log(emp);
//{ name: 'mike', age: 12, from: 12 }
复制代码
5)使用内置构建函数创建对象
var a=new Object();
a.name='mike';
a.age=12;
a.from='US';
//{ name: 'mike', age: 12, from: 'us' }
复制代码
6)遍历属性
//遍历属性
//for in
for(var k in laptop){
  //k代表每一个属性名
  //laptop 要遍历的对象
  console.log(k,laptop[k]);
}
复制代码

4.对象查看

1)查看属性是否存在
var s={
    name:1
}
console.log(s.name===undefined);//false
console.log(s.hasOwnProperty('name'));//true
复制代码
2)对象中的方法
var person={
  name:'然哥',
  play: function(){
    this.name//  this 目前 指代当前所在的对象
  }
}
//调用
person.play()
复制代码

四、数组

1.数组的基本构造

1)使用字面量创建数组
var s=['特斯拉','法拉利','劳斯莱斯'];
console.log(s);//['特斯拉','法拉利','劳斯莱斯']
var a=[19,19,16,29,16];
console.log(a);//[19,19,16,29,16]
复制代码
2)数组元素的访问
var chengshi=['长沙','成都','上海','北京'];
console.log(chengshi);
chengshi[0]='杭州';
console.log(chengshi);
chengshi[5]='青岛';
console.log(chengshi);
/*
[ '长沙', '成都', '上海', '北京' ]
[ '杭州', '成都', '上海', '北京' ]
[ '杭州', '成都', '上海', '北京', <1 empty item>, '青岛' ]
*/
复制代码
3)数组的长度
var com=[];
com[com.length]='www.baidu.com';
com[com.length]='www.sougou.com';
console.log(com);
//[ 'www.baidu.com', 'www.sougou.com' ]
复制代码
4)内置构造函数创建数组

new Array(初始长度);从0开始

var s=new Array(3);
console.log(s);
s[0]='com';
console.log(s);
s[2]='cn';
console.log(s);
var a=new Array('nice','com','ccna');
console.log(a);
/*
[ <3 empty items> ]
[ 'com', <2 empty items> ]
[ 'com', <1 empty item>, 'cn' ]
[ 'nice', 'com', 'ccna' ]
*/
复制代码
5)数组的分类
var arr=[1200];
arr['name']='bule';
arr['age']=12;
arr['sex']='woman';
console.log(arr);
//[ 1200, name: 'bule', age: 12, sex: 'woman' ]

var emp=[    {        eid:1,        name:'red'    },    {        eid:2,        name:'yellow'    }];
console.log(emp);
//[ { eid: 1, name: 'red' }, { eid: 2, name: 'yellow' } ]
复制代码
6)数组元素的遍历