在js调用函数时传递变量参数时,是传递值还是引用传递

理解1:都是值(基本/地址值)传递

理解2:可能是值传递,也有可能是引用传递(地址值)

一、什么是对象

  • 多个数据的封装体
  • 用来保存多个数据的容器
  • 一个对象代表现实世界中的一个事物

二、为什么要用对象

  • 统一管理多个数据

三、对象的组成

  • 属性:属性名(字符串 )+属性值(任意)组成
  • 方法:一种特别的属性(属性值是函数)

四、如何访问对象内部数据

  • .属性名:编码简单,有时不能用
  • [‘属性名’]:编码麻烦,能通用
  • 什么时候必须用[‘属性名’]的方式
1
2
3
4
5
6
7
8
9
10
11
12
13
//  1,属性名包含特殊字符:- 空格
var p = {};
//给P对象添加一个属性:content-type:text/json
// p.content-type = 'text/json'; //不能用
p['content-type'] = 'text/json';
console.log(p['content-type']) //text/json

// 2,变量名不确定
var propName = 'myAge';
var value = 18;
//p.propName = value //不能用
p[propName] = value
console.log(p[propName]) //18

五、什么是函数

  • 实现特定功能的n句语句的封装
  • 只有函数是可以执行的,其他类型的数据不能执行

六、为什么要调用函数

  • 提高代码复用
  • 便于阅读交流

七、如何定义函数

  • 函数声明
  • 表达式
1
2
3
4
5
6
function fn1(){ //函数声明
console.log(‘fn1()’)
}
var fn2 = function(){ //表达式
console.log('fn2()')
}

八、如何调用(执行)函数

  • test():直接调用
  • obj.test():通过对象调用
  • new test():new调用
  • test.call/apply(obj):临时让test成为obj的方法进行调用
1
2
3
4
5
6
7
var obj = {}
function test(){
this.xxx = 'qwrt'
}
//obj.test() 不能直接调用,根本就没有
test.call(obj) //obj.test() 可以让一个函数成为指定任意对象的方法进行调用
console.log(obj.xxx) //qwrt

九、什么函数才是回调函数

  • 你定义的
  • 你没有调用
  • 它最后执行了

十、常见的回调函数

  • dom事件回调函数
  • 定时器回调函数
  • ajax请求回调函数
  • 生命周期回调函数
1
2
3
4
5
6
document.getElementById('btn').onclick = function(){
alert('点击事件')
}
setTimeout(function(){
alert('定时器回调函数')
}, 2000)

十一、IIFE(Immediately-Invoked Function Expression)

作用:隐藏实现,不会污染外部命名空间

1
2
3
(function(){    //匿名函数自调用
console.log('.....')
})()