函数

- 函数也是一个对象,对象能做的函数都能做。
- 函数中可以保存可执行的代码,并且在需要的时候进行调用。
- 使用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种基本数据类型的又一种类型
- 对象是一种复合数据类型,在对象中可以保存不同类型的属性

对象的使用:

创建对象:

  1. 构造函数方式: var obj = new Object();
  2. 对象初始化器方式: var obj={};
  3. 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
}

RoOK1E
0 声望4 粉丝

« 上一篇
JS note ---语句
下一篇 »
Function类型