一.作用域
对象:是由函数名(键名)和属性值(键值)组成的数据
JS的执行顺序:
1.语法分析
查找出语法错误
2.预编译
-
生成AO(Activation Object)对象 {} ==
-
形参和变量作为AO对象的键名(属性名),属性值是undefined
-
实参赋值给形参
-
函数声明作为AO对象的函数名,把函数作为键名赋值给这个属性名
3.执行JS代码
作用域==>JS代码执行的环境
1.作用域
- 所有在script标签里面的代码,全都处在全局作用域中
- 全局作用域在页面打开时创建全局对象GO(window对象),页面关闭时销毁GO对象、
- 全局作用域中的变量是GO对象的属性名,变量的值是GO对象的属性值
2.函数作用域
- 所有在函数里面的代码,都处在函数作用域中
- 函数作用域在函数执行时创建AO对象,在函数结束时销毁AO对象
- 函数作用域中的变量是AO对象的属性名,变量的值是AO对象的属性值
- 当下一次执行函数时,会创建全新的AO对象
二.闭包&&自执行函数
闭包的用处:
- 实现累加值==》对父级函数内部变量的操作
- 可以做缓存
- 构建模块化实例
- 私有化变量
什么是闭包:
当内部函数被保存在外部时,由于内部函数的作用域链上存在内部函数创建时的环境(即父级函数和祖先函数的AO对象,全局对象GO),导致内部函数可以顺着作用域链寻找变量,所以形成了闭包,同时内部函数的作用域链上(即父级函数和祖先函数的AO对象,全局对象GO)无法被垃圾回收机制回收,导致了内存泄漏。
函数声明转换成函数表达式
第一种
(function()
{
console.log(1)
})(/*函数表达式外加一个括号就可以运行*/)
(function()
{
console.log(1)
}(/*括号写在里面也可以运行*/))
第二种
!function()
{
console.log(1)
}
第三种
~function()
{
console.log(1)
}
第四种
+function()
{
console.log(1)
}
第五种
-function()
{
console.log(1)
}
立即执行函数==》一次性函数
特点:只执行一次,在函数执行结束后,整个函数从内存中销毁,不占据内存空间
(function init(a,b,c){
return a+b+c
})(2,3,4,)
三.对象初探
例子:
var obj={
name :'heaven',
age:18,
sex:'male'
}
- 标准对象是由很多对键值组成的,每队键值用逗号隔开;
- 在控制台中对象是按照先0-9再a-z来排序的;
- 对象的键名一定是字符串,属性值是任意数据类型(即无论在键名位置输入数据都会转换成字符串类型);
对象的增添改查:
obj['height']='18厘米'//添加键名
obj.height='18厘米'//添加键值值
delete obj.height//删除键值
obj.height='8厘米'//改变键值
obj.height//查询键值
遍历对象的方式
for (var key in obj)
{
console.log(key,obj[key]);
}
四.字符串的常用方法
字符串的常用方法
var str='hello'
str.charAt(索引值)//获取字符串索引位置的字符
str.charCode(索引值)//获取字符串索引位置的字符的Unicode编码(0:48 a:97 A:66)
var a =String.fromCharCode(Unicode编码)//用Unicode编码来查到对应的字符
str.toUppercCase()//把字符串变大写,返回的是一个新的字符串,没有改变原来的字符串
str.toLowerCase()//与toUpperCase相对变小写,返回的是一个新的字符串,没有改变原来的字符串
str.indexOf(字符)//从左到右查询,返回字符在str中的位置,如果返回的值是-1,就说明字符不在str中
str.lastIndexOf(字符)//从右到左,返回字符在str中的位置,如果返回的值是-1,就说明字符不在str中
模拟JS自带的toUpperCase
-
遍历字符串
-
判断如果是小写字母就变大写
-
把结果抛出来
function myUpper(target){ var newStr=''; for(var i=0;i<target.length;i++) { var charCode=str.charCodeAt(i);//储存每个字母的字符编码 if(charCode>=97&&charCode<=122)//判断每个字符是不是小写 { newStr+=String.fromCharCode(charCode-32) } else { newStr+=target[i]; } } return newStr; } myUpper(str);
字符串的截取
var str='hello'
str.substr(n,m)//从索引n开始截取m个字母
str.slice(n,m)//从索引n开始截取m-n个字母,支持负值索引(最后一个字母是-1,往前数-2,-3,等等)
str.substring(n,m)//从索引n开始截取m-n个字母,不支持负值索引
str.split(字符)//用指定的字符来分割字符串
(如:str.split(e) 结果:['h','llo'])
str.replace(x,y)//用x来代替原字符串中的y
去除字符串中的空格
str.trimLeft()//去除字符串开始的空格
str.trimRight()//去除字符串结束的空格
str.trim()//去除字符串开始和结束的空格
合并字符串
str.concat(字符)//将指定字符或字符串合并到原字符串的尾部
++++