var和let的区别
prototype
闭包
匿名函数
自执行函数
变量和函数的声明
//var 和let 的区别
// var a = 99
// var b = 199
// console.log("out1 a=",a)
// console.log("out1 b=",b)
// varlet()
// function varlet(){
// console.log("in1 a=",a) // 编译的时候就在自己的作用域里找到了声明,所以不会去读取上层的值 故而运行的时候会打印undefined
// // console.log("in1 b=",b) 报错 未声明 不会去找上层的b 不论上层是var 还是let
// var a = 10;
// let b = 11;
// console.log("in2 a=",a)
// console.log("in2 b=",b)
// }
// console.log("out1 a=",a)
// console.log("out1 b=",b)
// for (var i = 0; i <10; i++) { //var 会做变量提升
// setTimeout(function() { // 同步注册回调函数到 异步的 宏任务队列。
// console.log(i); // 执行此代码时,同步代码for循环已经执行完成
// }, 0);
// }
// for (let i = 0; i <10; i++) { //let 不会提升,i虽然在全局作用域声明,但是在for循环体局部作用域中使用的时候,变量会被固定,不受外界干扰。
// setTimeout(function(){
// console.log(i)
// },0)
// }
//变量的作用域
// let num2 = 3;
// class Numbers{
// test(){
// console.log("any")
// }
// storeNum():void {
// var local_num = 14; // 局部变量
// }
// num1=1;
// static num2 = 2
// }
// var obj = new Numbers();
var global_num = 12; // 全局变量
var Numbers = /** @class */ (function () {
function Numbers() {
this.num_val = 13; // 实例变量
this.pval = 1;
}
Numbers.prototype.storeNum = function () {
var nums = [];
for (var _i = 0; _i < arguments.length; _i++) {
nums[_i] = arguments[_i];
}
var local_num = 14; // 局部变量
var i;
var sum = 0;
for (i = 0; i < nums.length; i++) {
sum = sum + nums[i];
}
console.log("和为:", sum);
};
Numbers.sval = 10; // 静态变量
return Numbers;
}());
console.log("全局变量为: " + global_num);
console.log(Numbers.sval); // 静态变量
var obj = new Numbers();
console.log(Numbers.pval);
(function asynsc(i) {
if (i >= 5)
return;
else
setTimeout(function () {
console.log(i);
i++;
asynsc(i);
}, 1000);
})(0);
obj.storeNum(1, 2, 3);
(function (d) {
d();
console.log(111);
})(function () { console.log(222); });
// console.log(Numbers.num1)
// console.log(obj.num2)
// // 闭包
// function baseFunc( n ){
// var i = 0
// i = i+1;
// console.log("i=",i)
// return function (){
// n=n+1
// console.log(n)
// }
// }
// var f1 = baseFunc(100)
// f1()
// f1()
// f1()
// f1()
// f1()
网友评论