1.javaScript的定义
①是一种专门为网页交互而设计的脚本语言
② 组成:
2.<script>元素
3.区分大小写
ECMAScript中的一切(变量、函数名,操作符)都区分大小写;
4.标识符
①第一个字符必须是字母、下划线、$,其他字符可以是字母、下划线、$或数字;
②ECMAScript标识符一般使用驼峰大小写格式,即第一个字母小写,剩下的每个单词的首字母大写;
③关键字是语言保留的,不能用做标识符
5.变量
①ECMAScript的变量是松散类型的(可以用来保存任何类型的数据)
② var s=10;(用var定义的变量是定义该变量作用域的局部变量,这个变量在该作用域执行完毕就会被销毁)
如果省略var操作符,该变量就成了全局变量,一般不再局部作用域定义全局变量,因为这很难维护;
③var 声明的全局变量实际上是定义了一个全局变量的属性,该属性时不可配置的,即,该属性无法通过delete删除,而声明直接赋值的全局变量的属性是可配置的,可以被delete运算符删除,但在严格模式下会报错;
var globalval=1;
function test(){
localval=2;
}
this.globalval1=3;
delete.globalval; //false
delete.localval; //true
delete.globalval1; //true
6.typeof操作符
7.数据类型的分类
8.基本类型和引用类型的区别
① 保存方式不同(基本数据类型保存的是实际值,引用 类型保存的是对象)的引用
②复制变量值存在不同
a.基本类型:
var num1=5;
var num2=num1;
基本数据类型的变量值复制,两个变量两个地址,只是值相同,两个变量参与任何操作都互不影响。
b.引用类型:
var obj1=new Object();
var obj2=obj1;
obj1.name="abc";
alert(obj2.name); //"abc"
因为引用类型实际保存的是一个引用即指针,所以引用类型复制就将存在1地址的指针复制一份,放到一个新地址中,即两个不同的地址存放着相同的指针,这两个指针指向存储在堆中的同一个对象,所以改变其中一个变量,就会影响到另一个变量
③传递参数都是按值传递
引用类型保存与复制的是对象的一个指针
a.传递基本数据类型
function addTen(num){
num+=10;
return num;
}
var count =20;
var result=addTen(count);
alert(count);//20
alert(result);//30
num实际上是局部变量,num与count互不相识,仅仅是具有相同的值,互不影响;
b.传递引用类型
function setName(obj){
obj.name="amy";
}
var person =new Object();
setName(person);
alert(person.name); //"amy"
函数传递的person对象的一个引用(指针),函数是按值传递,但是obj中保存的指针依旧会按引用访问对应的对象,obj和person指向的是同一个对象,所有obj添加属性,person也具有相同的效果;
function setName(obj){
obj.name="amy";
obj=new Object();//即使在函数内部修改了参数的值,但原始引用依旧没有变
obj.name="abc";//重写obj时,该变量中保存的是局部对象的指针,对其进行的属性添加,作用对象是该局部
//对象,当函数执行结束,局部对象立即被销毁
}
var person =new Object();
setName(person);
alert(person.name); //"amy",证明函数传递的参数即使是引用类型,也是按值传递
9.操作符
10.函数
①ECMAScript中的函数在定义时,不必指定是否有返回值,任何函数在任何时候都可以通过return语句返回要返回的值;函数在执行完return语句之后停止并立即退出,位于rerun之后语句将永远不会执行;
②return语句也可以不带任何返回值,则函数停止后将返回undefined;
③函数不介意传递进来多少个参数,也不在乎参数是什么数据类型,函数体内可以通过arguments对象来访问这个参数数组,使用arguments.length可以确定传进来多少个参数
function doAdd(){
if(arguments.length==1){
alert(arguments[0]+10);
}else if(argumentslength==2){
alert(arguments[1]+arguments[0]);
}
}
doAdd(10); //20
doAdd(30,20); //50
④没有重载
ECMAScript函数没有签名,因为其参数是由包含0个或多个值的数组来表示的,而没有函数签名,正真的重载是做不到的,
如果定义了两个名字相同的函数,则该名字只属于后定义的函数
⑤有函数名的叫具名函数;没有函数名的叫匿名函数,匿名函数的自调用格式如下:
匿名函数的自调用可以在包含函数创建的时候立即执行;
(function (num){
return num;
})(i);
//<=>
var result=function (num){
return num;
}(i);
11.执行环境和作用域
执行环境分为全局执行环境和局部执行环境
例子:
function outerFun()
{
var a =0;
alert(a);
}
var a=4;
outerFun();
alert(a);
结果是 0,4 . 因为在函数内部使用了var关键字 维护a的作用域在outFun()内部.
function outerFun()
{
a =0;
alert(a);
}
var a=4;
outerFun();
alert(a);
结果为 0,0。作用域链是描述一种路径的术语,沿着该路径可以确定变量的值 . 当执行a=0时,因为没有使用var关键字,因此赋值操作会沿着作用域链到var a=4; 并改变其值。