<script type="text/javascript">
//AO GO 作用域 作用域链产生的一切问题
/*
AO -> function 独立的仓库(作用域)
每个函数都有GO
全局执行的前一刻 开始预编译 产生GO-》函数声明已经定义 已经存在作用域及链
然后开始全局执行 修改GO的内容
*/
//对象
var obj={
name:'hui',
add:'武汉'
}
//函数也是一种对象类型 引用类型 引用值 test.name test.length test.prototype
//对象 -》 有些属性是外卖无法访问的 js内部的隐式属性
/*
函数创建时,生成一个隐式属性
函数存储的域链的容器 作用域链
函数执行玩后AO要销毁 AO是即时的存储容器
*/
function test(a,b){}
//闭包
/*
当内部函数被返回到外部并保存时 一定会产生闭包 闭包会产生原来的作用域链不释放 过度闭包可能导致内存泄露 或加载过慢
*/
//立即执行函数 执行后立即释放
//IIFE
/*
方式一: (function(){}());//w3c建议
方式二:(function(){})();
*/
console.log("-------------------");
(function aa(a,b){console.log(a+b)})(2,3);//可有实参 也可以有返回值
//(function aa(a,b){return a+b;})(2,3);
//()里面的内容(函数) 已经转发为表达式 也就是说立即执行条件是 *表达式*
/*
function aa(a,b){console.log(a+b)}(2,3);不可被执行 缺少()包裹
*/
console.log("----------------");
var bb= function (){console.log("1234")};
console.log(bb);//ƒ (){console.log("1234")}
var bb1= function (){console.log("1234")}();//会输出1234 执行后被销毁
console.log(bb1);//另起一行 undefined
/*
(function test(){}());
(function (){}());
函数有无名称意义不大 因为函数已经转变为表达式
函数申明变为表达式的方法 + - !|| && -> 比如: + function (){}();
*/
//关于‘ ,’逗号其实是一个运算符
var num=console.log(1+2,2+3);
console.log(num);//只会返回逗号后面的内容
function aa1(a,b){console.log(1)}(6);//()如果没有内容会报错 立即执行函数语法错误 如果有参数则默认为(6)为表达式 即使写法有错误
console.log("----------------------")
function biBao(){
var arr = [];
for (var i=0;i<5;i++){
//立即执行函数
(function (j){
arr[j]=function (){
document.write(j+' ');
}
}(i));
//以下不是立即执行函数
/*
arr[i]=function (num){//num的取值被覆盖
document.write((num+1)+' ');
*/
// console.log(num);//01234
// function N(num){
// console.log(num);//undefined
// document.write((num+1)+' ');//NaN
// console.log(num);//undefined
// }
// N();
}
}
return arr;
}
var myArr = biBao();
for (var j=0;j<5;j++){
//外部借用
myArr[j](j);//12345
}
console.log("---------------------");
</script>
作用域 立即执行函数 闭包 逗号运算符
最新推荐文章于 2024-09-08 21:17:37 发布