函数
- 函数也是一个对象,对象能做的函数都能做。
- 函数中可以保存可执行的代码,并且在需要的时候进行调用。
- 使用typeof检查函数时,会返回 function
function fun(){
return 'function'
}
console.log(typeof fun); // function
函数的创建
1.函数声明
function函数名(形参1,形参2,...形参N){
函数体
}
function sum (num1,num2){
return num1+num2
}
2.函数表达式
var 函数名=function(形参1,形参2,...形参N){
函数体
}
var sum=function(num1,num2){
return num1+num2
}
函数的调用
函数调用:函数对象+()
function fun(){
console.log('我是一个function');
}
fun() //我是一个function
函数的参数
形参(形式参数)
- 定义函数时可以在函数定义数量不等的形参,多个形参之间使用,隔开
- 定义形参就相当于在函数中声明了对应的变量但是并不赋值
- 形参会在函数调用的时候赋值
实参(实际参数)
- 函数调用时,可以在()传递实参
- 实参会赋值给对应的形参
- js解析器不会检查实参的类型和数量
- 可以传递任意类型的实参(基本数据类型、对象、函数)
- 可以传递任意数量的实参
返回值
- 在函数中可以通过 return 来设置返回值
- 语法:return 值;
- 返回值将会作为函数的执行结果返回,可以定义一个变量来接收返回值
- 如果return后不跟值,或者不写return则相当于return undefined
- return后的所有的代码都不会执行,return一执行函数立即结束
- 任何类型的值都可以作为函数的返回值
function num(){
console.log('这是一个函数')
return 100;
}
console.log(fun()) //这是一个函数
//100
- 函数的return语句的确允许不编写在函数体的最后面
- 一旦return语句不在函数体的最后面 - return语句之后的代码都不再执行
function fn(){
console.log('这是return语句之前...');
return;
console.log('这是return语句之后...');
}
console.log(fn()); // 这是return语句之前...
//undefined
作用域
作用域就是变量的作用范围,一个变量在哪些范围中可见
全局作用域
- 全局作用域在页面加载时创建,在页面关闭时销毁。
- 直接在script标签中编写的内容,都在全局作用域中
- 在页面中有一个全局对象window,代表的是整个的浏览器窗口
在全局作用域中创建的变量都会作为window的属性保存
在全局作用域中创建的函数都会作为window的方法保存
- 在全局作用域中创建的变量和函数都是全局变量和函数,可以在页面的任意位置访问。
var a=10;
console.log(a); //10
函数作用域(局部作用域)
- 函数作用域在函数调用时创建,在调用结束时销毁。
- 函数每执行一次就会创建一个新的函数作用域。
- 在函数中使用var关键字声明的变量是局部变量,局部变量只能在函数内部使用,外部无法访问。
- 如果不使用var关键字声明变量,则变量会变成全局变量。
var a=10;
function fun(){
var b=20;
console.log(a); //10
console.log(b); //20
}
全局作用域不能访问局部变量
function fun(){
var a=10;
}
console.log(a); // a is not defined;
对象
- 对象是一个区别于5种基本数据类型的又一种类型
- 对象是一种复合数据类型,在对象中可以保存不同类型的属性
对象的使用:
创建对象:
- 构造函数方式: var obj = new Object();
- 对象初始化器方式: var obj={};
- Object.create()方法: Object.create();
读取对象的属性:
对象.属性名(不适用于复杂命名的属性名称)
var person ={
sex:'man',
age:30
}
console.log(person.sex); //man
对象["属性名"] (适用于复杂命名的属性名称)
var obj = {
'Type-Content' : 'text/html',
}
console.log(obj['Type-Content']);// text/html
向对象中添加(修改)属性:
对象["属性名"]
var iLike={
hobby:'听歌'
}
}
iLike['hobby']='睡觉';
console.log(iLike.hobby) //睡觉
对象.属性名
var person={
name:'55开'
}
person.name='PDD';
console.log(person,name) //PDD
枚举属性
for...in:该方法依次访问一个对象及其原型链中所有可枚举的属性
var obj={
name:'孙悟空',
age:'18',
hobby:function(){
console.log('打妖怪')
}
}
for(var i in obj ){
console.log(i) // name age hobby
}
检测对象的属性
- 使用in关键字 如果属性存在返回true 不存在返回false
var obj ={
name: 'javascript'
};
console.log('name' in obj); //true
- 使用Object对象的hasOwnPhasOwnProperty()方法 如果属性存在返回true 不存在返回false
var obj ={
name: 'javascript'
};
console.log(obj.hasOwnProperty('name')); //true
- 使用undefined判断 如果属性存在返回false 不存在返回true
var obj ={
name: 'javascript'
};
console.log(obj.name === undefined); // false
- 使用if语句进行判断
var obj ={
name: 'javascript'
};
if(obj.name){console.log('属性存在')} //属性存在
删除对象的属性
可以用delete操作符删除一个不是继承而来的属性
var obj=new Object();
obj.name='孙悟空';
obj.age='18';
delete obj.age; //删除对象的自有属性
for(var i in obj){
console.log(i); //name
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。