极客学院之javascript高级技巧
2016-06-04 00:12
381 查看
1、变量作用域和闭包
function test(){
if(false){
var i=10}
else{
var t=100;
}
alert(t);}
test();
//js是函数级别的作用域,在内部的变量,内部都能访问,外部不能访问内部的,内部能访问外部的
var j=100;
~(function test(){
console.log(j);})();
//波浪线才能有意义,是把~后的一块变成一个表达式然后输出
var j=100;
function test(){
var j;
alert(j);
j=10;}
test();
结果:undefine,,因为内部的var j;把外部的var j=1001给干掉了,内部的j=10;还没赋值就已经输出了
闭包:
function test(){
var k=1000;
return function(){
return k;
}
}
var t=test()();
alert(t);
//闭包:就是拿到本不该属于自己的东西
2、this指针的使用:谁调用它,this就指谁
this.m=1000;
var obj={
m:100;
test:function(){
alert(this.m);
}
}
obj.test();
结果:100;因为调用了obj的this。
加入闭包特殊情况
this.m=1000;
var obj={
m:100;
test:function(){
alert(this.m);
}
return function(){
alert(this.m);
}
}
(obj.test())(); 或者 var t=obj.test(); window.t();s
结果:先弹出100,后弹出1000;因为采用了闭包方法return:它把this抛出到外面window处了,所以获取的是外面的this.m=1000;
this.a=1000;
function test(){
this.a=1;
}
test.prototype.geta=function(){
return this;
};
var p=new test;
console.log(p.geta());
//prototype 属性使您有能力向对象添加属性和方法
结果:p是test()new出来的,p.geta()=1;因为调用了geta的this,通过prototype给原形test的this添加了方法,this又是test()中this.a=1。
3、按值传递和按引用传递
function test(num){
num=num+1;
return num;
}
var num=1;
alert(test(num));
结果:2
//按值传递
function test(num){
//这里对num这个变量创建了一个内存的副本
var num=num+1;
return num;
}
var num=1;//此时num为number
alert(test(num);
alert(num);
结果:首先弹出2 ,然后弹出1
//按引用传递
function test(obj){
//当前的Obj对内存的这个地址指向同一个
obj.age='20';
console.log("inner","obj");
}
var obj={ //此时Obj为对象
name:"xiaoming";
}
test(obj);
console.log('outer',obj);
结果:inner Object{name:"xiaoming",age:"20"}
outer Object{name:xiaoming",age:"20"}
//引用类型:js对象,object,array
//值类型:string ,number,boolean
function test(){
if(false){
var i=10}
else{
var t=100;
}
alert(t);}
test();
//js是函数级别的作用域,在内部的变量,内部都能访问,外部不能访问内部的,内部能访问外部的
var j=100;
~(function test(){
console.log(j);})();
//波浪线才能有意义,是把~后的一块变成一个表达式然后输出
var j=100;
function test(){
var j;
alert(j);
j=10;}
test();
结果:undefine,,因为内部的var j;把外部的var j=1001给干掉了,内部的j=10;还没赋值就已经输出了
闭包:
function test(){
var k=1000;
return function(){
return k;
}
}
var t=test()();
alert(t);
//闭包:就是拿到本不该属于自己的东西
2、this指针的使用:谁调用它,this就指谁
this.m=1000;
var obj={
m:100;
test:function(){
alert(this.m);
}
}
obj.test();
结果:100;因为调用了obj的this。
加入闭包特殊情况
this.m=1000;
var obj={
m:100;
test:function(){
alert(this.m);
}
return function(){
alert(this.m);
}
}
(obj.test())(); 或者 var t=obj.test(); window.t();s
结果:先弹出100,后弹出1000;因为采用了闭包方法return:它把this抛出到外面window处了,所以获取的是外面的this.m=1000;
this.a=1000;
function test(){
this.a=1;
}
test.prototype.geta=function(){
return this;
};
var p=new test;
console.log(p.geta());
//prototype 属性使您有能力向对象添加属性和方法
结果:p是test()new出来的,p.geta()=1;因为调用了geta的this,通过prototype给原形test的this添加了方法,this又是test()中this.a=1。
3、按值传递和按引用传递
function test(num){
num=num+1;
return num;
}
var num=1;
alert(test(num));
结果:2
//按值传递
function test(num){
//这里对num这个变量创建了一个内存的副本
var num=num+1;
return num;
}
var num=1;//此时num为number
alert(test(num);
alert(num);
结果:首先弹出2 ,然后弹出1
//按引用传递
function test(obj){
//当前的Obj对内存的这个地址指向同一个
obj.age='20';
console.log("inner","obj");
}
var obj={ //此时Obj为对象
name:"xiaoming";
}
test(obj);
console.log('outer',obj);
结果:inner Object{name:"xiaoming",age:"20"}
outer Object{name:xiaoming",age:"20"}
//引用类型:js对象,object,array
//值类型:string ,number,boolean
相关文章推荐
- javascript获取select标签选中的值
- js函数参数及闭包
- javascript(十三) DOM的增删查改
- javascript(十四) 自定义js对象
- javascript(十五) 错误处理技术
- fastjson解析
- javascript上通过YCombinator实现递归
- 捕获JS 错误日志
- ECMAScript6知识点2
- Javascript 键盘事件
- JavaScript动画基本原理
- jsp %EF%BB%BF
- echarts-all.js:1 Dom’s width & height should be ready before init.
- 把JSP转换成HTML生成静态页面
- JavaScript操作cookie
- JSP内置对象
- JZOJ4513. 【JSOI2016】独特的树叶
- Ajax跨域的解决方法之JSONP
- Javascript基础
- JavaScript 语言基础知识点总结