个人学习JavaScript时的笔记
很多都忘了,通过博客记录,希望加深印象和个人见解
参数:形参和实参
形参:函数定义的时候函数名字后面的小括号里的变量就是参数,是不需要写var
形参:函数调用的时候小括号里传入的变量或者是值
返回值:函数中如果有return,那么这个函数就有返回值
如果函数没有
函数作用:代码重复使用
函数的参数:
1.形参:函数定义的时候,函数名字后面的小括号里面的变量
2.实参:函数调用的时候,函数名字后面的小括号里的变量或者值
返回值:
函数中有return,函数有返回值
函数中没有return,函数没有返回值
没有明确返回值:函数中没有return或者return后面没有任何内容
如果一个函数没有明确的返回值,接收这个函数,结果是undefined
无参数 无返回值 的函数
无参数 有返回值 的函数
有参数 无返回值 的函数
有参数 有返回值 的函数
arguments ——-> 可以获取函数调用的时候,传入的实参的个数
arguments是一个对象,是一个伪数组
arguments.length ——> 是实参的个数
arguments[索引] ——-> 实参的值
作用域:变量的使用范围
全局作用域:全局变量在任何位置都可以使用的范围
局部作用域:局部变量只能在某个笛梵使用---函数内
作用域链:在一个函数中使用一个变量,先在该函数中搜索这个变量,找到了则使用,找不到则继续向外面找这个变量,找到则使用,一直找到全局作用域,找不到则是undefined
全局变量:只要是在函数外面声明的变量都可以看成或者是理解成是全局变量
局部变量:在函数定义的变量
预解析:在执行代码之前做的事情
变量的声明和函数的声明被提前了,变量和函数的声明会提升到当前所在的作用域做的最上面
函数中的变量声明,会提升到该函数的作用域链的最上面(里面)
如果有多对script标签都有相同名字的函数,预解析的时候是分段的,互不影响
面向对象特性:封装,继承,多态 (抽象性)
js不是面向对象的语言,但可以模拟面向对象的思想
js是一门基于对象的语言
什么是对象?
看得见,摸得到,具体特指的某个东西
找对象
描述找对象
对象:有属性和方法,具体特指的某个事物
特征———-属性
行为———-方法
创建对象三种方式
1.调用系统的构造函数创建对象
2.自定义构造函数创建对象(结合第一种和需求通过工厂模式创建对象)
3.字面量的方式创建对象
实例化对象
1 | var obj = new Object() |
对象有特征---属性和行为---方法
添加属性----如何添加属性? 对象.名字=值
obj.xx 就是添加属性
obj.xx = function(){
//代码
};就是方法(也就是通过匿名函数将对象名赋值给他)
工厂模式创建对象
例子:
1 | function test(name,age){ |
2 | var obj = new Object(); |
3 | obj.name = name; |
4 | obj.age = age; |
5 | obj.sayHi = function(){ |
6 | console.log("hello,我叫:"+this.name+"我今年:"+"this.age") |
7 | } |
8 | return obj |
9 | } |
10 | //通过参数使用函数 |
11 | person1 = test('小明',28); |
12 | person2 = test('小刚',21); |
自定义函数
例子:
1 | function Dog(){ |
2 | this.name = name; |
3 | this.age = age; |
4 | this.sex = sex; |
5 | this.sayHi=function(){ |
6 | console.log("小狗的名字:"+this.name+",年龄是:"+this.age+" 性别:"+this.sex); |
7 | } |
8 | var dog = new Dog("小黄",10,"公"); |
9 | console.log(dog instanceof Person);//false |
10 | console.log(dog instanceof Dog);//true |
11 | } |
1.在内存中开辟(申请一块空闲的空间)空间,存储创建的新的对象
2.把this设置为当前的对象
3.设置对象的属性和方法的值
4.把this这个对象返回
3.字面量的方式创建对象
例子:
1 | var obj = {}; |
2 | obj.name = "小白"; |
3 | obj.age = 10; |
4 | |
5 | obj.sayHi=function(){ |
6 | console.log("我是:"+this.name); |
7 | } |
8 | obj.sayHi(); |
9 | |
10 | //优化后 |
11 | |
12 | var obj2 = { |
13 | name:"小明", |
14 | age:20, |
15 | sayHi:function(){ |
16 | console.log("我是:"+this.name); |
17 | }, |
18 | eat:function(){ |
19 | console.log("吃了"); |
20 | } |
21 | } |
22 | obj2.sayHi(); |
23 | obj2.eat(); |
js是一门什么样的语言?
是一门解释性的语言
是一门脚本语言
是一门弱类型语言,声明变量都用var
是一门基于对象的语言
是一门动态类的语言
1、代码(变量)只有执行到这个位置的时候,才知道这个变量中到底存储的是什么,如果是对象,就有对象的属性和方法,如果是变量就是变量的作用
2、对象没有什么,只要点了,通过语法,那么就可以为对象添加属性或者方法
原始数据类型: number,string,boolean,undefined,null,object
基本类型(简单类型),值类型: number,string,boolean
复杂类型(引用类型):object
空类型:undefined,null
值类型的值在那一块空间中存储?栈中存储
引用类型的值在哪一块空间中存储?栈和堆中存储
//值类型,值在栈上
var num =10;
//复杂类型,对象在堆,地址(引用)在栈
var obj = {}
//值类型之间传递,传递的是值
//引用类型之间传递,传递的是地址(地址)