变量
1.什么情况下 报错 xxx is not defined 某变量未定义
2.xx is not a function 某函数未定义
变量的使用规则
第一步:在哪里用的?代码是否执行了
在当前作用域中找是否有var 声明了该变量:
如果有,再看在当前作用域中,离他最近的一次赋值是什么,那就用什么值
如果没有,就去上一层作用域中找,看是否有var 声明该变量,直到找到window下为止
window 下没有 报错 xxx is not defined
总结:第一步在作用域中找var,第二步往上找 最近的赋值
window全局
window 全局对象 底层是global
1.window 对象在什么时候生成的?页面加载的时候
2.有几个window? 一个,只有一个全局环境
3.window 与script 标签个数无关
作用域
什么是作用域?
作用域指的是程序运行代码声明变量的区域
作用域决定了如何查找变量,也就是当前执行代码 使用变量的权限,或者说 当前执行代码 使用变量的赋值是什么
js中采用的是静态作用域 与执行环境无关 与声明有关
作用域的分类:全局和局部
全局相对浏览器,window 对象下所有内容都是全局的,访问权限在任意代码处
局部作用域:函数方法内部声明的变量,访问权限在方法体内
数组去重的方法
确定形参
确定结果:返回新数组,新数组是不重复的数据,数据源不变
var array = [1,1,2,2,2,3,2,2]
function unique(array){
var res = [];
// 验证res 中是否存在 array数组中元素
for(var i=0;i<array.length;i++){
// j===resLen 循环执行完毕 都没有执行break
// —> 当前的arr[i] 不重复
for(var j=0;j<res.length;j++){
// 如果res 中有arr[i]
if(array[i] === res[j]){
break;
}
}
if(j === res.length){
res.push[array[i]]
}
}
return res;
}
console.log(unique(array))
数组排序
// sort() 数组排序 不修改
// 确定形参:被排序的数组 参二 控制升序和降序
// 返回排序后的数组
ar arr = [2,3,1,2,4,5]
function sort(array,callback){
for(var i=0;i<array.length;i++){
for(var j=i+1;j<array.length;j++){
if(array[i]<array[j]){
var tmp = array[i];
array[i] = array[j]
array[j] = tmp
}
}
}
return array
}
console.log(sort(arr));
console.log(arr);