javascript高级技巧

变量作用域和闭包

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
// js是函数级作用域,在内部的变量内部都能访问,外部不能访问内部的,内部能访问外部的
test();
var j;
j = 1000;
function test(){
if(false){
var i=10;
}else{
var t =100;
}
console.log('bbb',t);
console.log('cccc',j);
}
alert('....',t);
</script>
<script>
var j = 100;
~(function test(){
console.log(j);
})();
//100
//-1
</script>
<script>
var j =100;
function test(){
var j;
alert(j);//拿不到外面的J,里面的j值,war在前面
j=10
}
//执行test()根本取不到
test()
</script>
<script>
//闭包:闭包就是拿到本不属于它的东西
var j = 100;
function test(){
var j;
j = 10;
var k = 666;
return function(){
return k;
}
alert(j);
}
var t = test()();
alert(t); </script>
</body>
</html>

this指针的使用

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
// window.m = 100;
// // this指针的使用
// function test(){
// alert(this.m);
// }
// window.test(); this.m = 1000;
var obj = {
m:100,
test:function(){
alert(this.m);
return function(){
alert(this.m);//
}
}
}
// 谁调指向谁
var t = obj.test()
window.t();
//上面等同于
// (obj.test()) ();
</script>
</body>
</html>
<script>
this.a = 1000;
function test(){
this.a = 1;
}
test.prototype.geta = function(){
return this.a;
}
var p = new test;
console.log(p.geta);
</script>
<script>
function test(){
this.a = 1;
}
test.prototype.a = 100;
var p = new test;
console.log(p);
</script>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<input type="button" id="test" value="test" style="color:red;">
<script>
var style = {
color:"green"
}
window.test();
document.getElementById("test").click = test;
function test(){
alert(this.style.color);
}
</script>
</body>
</html>

按值传递和按引用传递

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
function test(num){
//这里对num 创建了一个内存的副本
var num = num+1;
return num;
}
var num = 1;
alert(test(num));
alert(num);
</script>
<script>
function test(obj){
obj.age = "20"
console.log('内部obj',obj);
}
var obj = {
name:'xiaoming'
}
test(obj);
console.log('外部的..',obj);
</script>
</body>
</html>

by上面的例子其实不够经典也不够高级

本文看自前端常用的库和实用技术之JavaScript按值传递和按引用传递

最新文章

  1. innodb的锁
  2. HtmlAgilityPack 处理通配的contains
  3. Linux Dynamic Shared Library &amp;&amp; LD Linker
  4. IOS - AFN
  5. ember.js学习笔记
  6. Windows 7下安装MongoDB
  7. C语言异常处理和连接数据库
  8. dubbo子模块
  9. poj1160 dp
  10. 用Xshell访问 虚拟机里的kali
  11. MemCachedClient数据写入的三个方法
  12. Json格式的http请求
  13. IL(Intermediate Language)
  14. Mysql 库、表、字段 字符集
  15. 【PHP】最详细PHP从入门到精通(四)——PHP中的字符串
  16. Vue 可输入可下拉组件的封装
  17. 关于整数溢出和NaN的问题
  18. peizhiwenjian
  19. MongoDB索引管理-索引的创建、查看、删除
  20. GlusterFS分布式存储学习笔记

热门文章

  1. 拾遗:Vim 批量删除匹配到的行
  2. 在webpack开发中利用bootstrap4中的字体图标
  3. JUC源码分析-集合篇:并发类容器介绍
  4. 运维生涯中总有一次痛彻心扉的rm命令
  5. 牛客OI月赛12-提高组题解
  6. 创建UI的线程才能访问UI,那么怎样才算访问UI呢
  7. linux每日命令(3):which命令
  8. ubuntu QT安装以及配置交叉编译环境
  9. Java 二叉树遍历相关操作
  10. pycharm 2020 激活码 破解教程