(number string boolean null undefined )
值类型 赋值 不会改原数据
(fuction object 数组 )
引用类型 赋值 会修改原数据
函数参数的值传递和引用传递
找arguments中的最大值
var e = mymax(10, 9, 4, 2, 123, 50);
//arguments是类数组不是数组
function mymax() {
if (arguments.length <= 0) {
return NaN;
}
var max = arguments[0];
for (var i = 0; i < arguments.length; i++) {
if (arguments[i] > max) {
max = arguments[i];
}
}
return max;
}
console.log(e);
javaScript的任务(js的代码,js的语句)
同步任务:for,求和,js附值,js运算符,表单处理
异步任务:dom事件.dom的api处理,ajax
javascript是单线程的以队列的方法进行工作
执行上下文的生命周期
总的的生命周期:创建→执行→出栈等待销毁
创建阶段: 创建作用域链(Scope Chain) 创建变量对象(或者AO):首先初始化函数的参数arguments,初始化函数声明,初始化变量(undefined)。函数的优先级要高于变量,如果变量和函数重名,变量会被忽略。 创建arguments对象,检查上下文,初始化参数名称和值并创建引用的复制。 扫描上下文的函数声明(而非函数表达式): 为发现的每一个函数,在变量对象上创建一个属性——确切的说是函数的名字——其有一个指向函数在内存中的引用。 如果函数的名字已经存在,引用指针将被重写。 扫描上下文的变量声明: 为发现的每个变量声明,在变量对象上创建一个属性——就是变量的名字,并且将变量的值初始化为undefined 如果变量的名字已经在变量对象里存在,将不会进行任何操作并继续扫描。 求出上下文内部“this”的值。 执行阶段: 执行变量赋值、代码执行 回收阶段: 执行上下文出栈等待虚拟机回收执行上下文
函数变量的作用域
作用域:就是变量声明的区域,就是变量和函数的可访问范围。在全局声明的变量为全局可见可访问的就是全局变量,如果在函数内部声明的变量只能在函数内部访问 函数的参数只能在函数内部访问,是局部变量 JavaScript没有块级作用域,只有函数作用域和全局作用域。for循环内部定义的变量是函数级别的作用域。 变量没有在函数内声明或者声明的时候没有带var就是全局变量,拥有全局作用域。特殊:var a = b = c = 0; b与c是全局变量。 全局作用域的变量可以在js中任何地方调用,函数作用域的变量只能在自己函数内部调用,包括自己内部定义的其他函数都可以直接调用。 变量的作用域是以它声明时的为准,因为变量的作用域在JS代码的解释阶段就已经完成规则的制定。
没有块级作用域
JavaScript没有块级作用域 for循环、while循环中定义的变量的作用域是函数级别的作用域 C、C#、C++、Java: 在for循环内部定义的变量,只能在for循环内部访问。但是在js中,因为没有块级作用域,所以在for循环内部定义的变量在整个所在的函数内部是可以访问的。