渡一领跑计划-春季班
507报道
函数
一个函数产生一个作用域,存储局部变量,可以访问外部的全局变量,函数外部的变量不能访问函数内部的变量。多个函数产生多个作用域,相互直接不能访问。
命名函数 function test(){};
匿名函数 var fn = function(){};
函数执行:
test();
fn();
function 函数名(形参){ };
函数名(实参);
形参与实参相映射,使用实参可以往函数中传参。
函数都有一个arguments为实参列表;
作用域(scope)
在函数执行前一刻,会产生一个执行期上下文,多次执行会产生多个执行期上下文;
每个执行期上下文都是独一无二的,当函数执行完毕,执行期上下文销毁。
[[scope]]由函数产生所产生的域,存储了执行期上下文的集合(作用域链)
作用域链:[[scope]]存储了执行期上下文的集合,这种集合程链式链接称为作用域链;
使用return 可以终止返回函数;
闭包(函数被保存到了外部必定产生闭包)
两个函数或多个函数,内部的函数值被保存到了外部,必定产生闭包;
被保存到外部的函数可以访问在内部时函数产生的环境变量
列:
function test(){
var num = 1;
function add(){
console.log(num ++);
}
return add;
}
var fn = test();
fn();1
fn();2
fn();3
闭包可以实现公有变量,做累加器
立即执行函数 针对初始化功能的函数
函数执行完一次立即释放
使用方式:
(function(){}());
(function(){})()
对象(与函数的使用方法一致)
创建对象的方法
1.对象字面量 plainObject
var data = {
属性名 : 属性值,
属性名 : 属性值,
属性名 : 属性值,
};
2.系统自带的构造函数Object()
使用new object()创造对象
var data = new object();
data.name = ;
data.age = ;
3.自定义(使用大驼峰式命名法,区分函数与构造函数)
function Data(){
name = ;
age = ;
}
var data = new Data();
function Data(name,age){
this.name = name;
this.age = age;
}
var data = new Data();
data.name = ‘qk’;
data,age = 13;
this指向自己本身
1.数据的增、删、改、查
页面布局先定义整体框架,添加css属性,在定义内部元素;
var a = 1;
初始变量赋值 称为初始化
显示类型转换
number(); a为NaN undefined为NaN null为0
parseInt() 转为整数
parsefloat
string 六种基本类型都转为字符串
tostring() undefind 和 null 不能使用
boolean 转为true fal
typeof() 查看元素类型(未一一种不报错)
typeof(typeof()) 类型都为字符串
typeof(null)类型为Object 历史遗留问题
隐式类型转换
命名函数
function test(){
}
test()
匿名函数
var test = function(){
}
test();
arguments实参列表
js 单线程,解释性语言
解释一行执行一行
三部曲
语法分析
预编译
解释执行
预编译:
全局变量 GO——归window所有
局部变量 AO
一个函数创建时会产生[[scopt]]的作用域,存储执行期上下文的集合,这个集合成链式链接,这种链式链接称为作用域链;
一个函数查找变量时会上作用域链上从上至下查找变量
当函数执行完毕时会销毁执行期上下文;再次执行函数时又重新创建;
预编译环节:
1、变量声明与形参提升至最上作为属性名,值为undefined
未经声明就赋值的值归全局Window所有
2、实参与形参先统一
3、在函数体里找函数声明,值赋予函数体
4、依次向下查找属性值,赋值
函数执行完毕销毁
将函数内部值保存到外部就会形成闭包,依旧可以访问函数内部的环境变量;
闭包会导致内存泄漏(内存越来越少)
对象
增删改查(删delete)
1、对象自变量
var obj = {}
2、系统定义的构造函数Object()
使用new Object();创造对象
var obj = new Object();
3.自定义 使用大驼峰式
function Data(){}
var data = new Data();