JavaScript Function

function

method

方法&函数

  1. function 是更通用的概念,如数学、编程
  2. method 是面向对象中的概念,一般与类或对象成对出现

区别

关系

  1. 对象的属性可以是任意类型
  2. 对象的属性如果是函数类型,它就叫做这个对象的方法
  3. 所以方法的本质还是函数

目录

  1. 复杂类型
    1. 对象
    2. 数组
    3. 对象和数组补缺
    4. 函数
  2. 函数
  3. 问答

对象

1. 只有对象才有属性(object.name)

2. 字符串不是对象

那么请问为什么可以写 'string'.length?

1. alert(object) 会什么得到 "[object Object]

2. toString() 有什么用?

数组

array.sort()

array.sort(compare)

array.splice()

字符串

array.join('-')

string.split()

string.substring()

复杂类型

  • 函数
    • 声明一个函数
      • 形式参数(形参)
      • 实际参数(实参)
    • 赋值为一个方法(函数表达式)
    • 匿名方法与具名方法
    • 函数的调用
      • fun()
      • obj.fun()
      • fun.call()
  • 函数的属性和方法
    • name
    • length
    • toString
  • 函数嵌套(不建议嵌套太深)
  • 函数定义 V.S. 函数执行

作用域

var v = 1;

function f(){
   console.log(v);
}

f()
// 1
function f(){
   var v = 1;
}

v
// ReferenceError: v is not defined

变量不是哪里都能用的

全局变量(跨文件)

局部变量(只能在函数内部访问)

函数作用域

  1. 函数能独立出一个作用域
  2. 函数里面可以访问函数外面
    1. 问:哪个外面?声明时的外面还是调用时的外面?

应用

  1. 立即执行函数
  2. 闭包
var v = 1;

function f(){
   var v = 2;
   console.log(v);
}

f()
// 2

v
// 1
var a = 1;
var x = function (){
  console.log(a);
};

function f(){
  var a = 2;
  x();
}

f() // 1

函数能独立出一个作用域

函数里面可以访问函数外面

var v = 1;

function f(){
   var v = 2;
   console.log(v);
}

f()
// 2

v
// 1
var a = 1;
var x = function (){
  console.log(a);
};

function f(){
  var a = 2;
  x();
}

f() // 1

函数能独立出一个作用域

函数里面可以访问函数外面

!function(){
    var a = 1
    console.log(a)
}()

!function(){
    var a = 2
    console.log(a)
}()
var items = document.getElementsByTagName('li')

for(var i=0; i<items.length; i++){
  items[i].onclick = function(){
    console.log(i)
  }
}

立即执行函数(名词)

闭包、异步

回调

callback - call back

function doSomething(xxx){
    console.log('some thing')
    xxx('success')
}

doSomething(function(result){
    console.log(result)
})

同步 V.S. 异步

console.log(1)
console.log(2)
console.log(3)

setTimeout(callback,time)

一段时间后将 callback 放入执行清单

JS 引擎做完手头的事情才会去看执行清单

console.log(1)
setTimeout(function(){
    console.log(2)
},0)
console.log(3)

同步回调 V.S. 异步回调

function doSomething(callback){
    console.log('some thing')
    callback('success')
}

doSomething(function(result){
    console.log(result)
})
var doSomething(callback){
    setTimeout(function(){
        console.log('some thing')
        callback('success')
    },0)
}

doSomething(function(result){
    console.log(result)
})

你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下",然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)。
而异步通信机制,书店老板直接告诉你我查一下啊,查好了打电话给你,然后直接挂电话了(不返回结果)。然后查好了,他会主动打电话给你。在这里老板通过“回电”这种方式来回调。

完。

Made with Slides.com