Comments (2)
this 的工作原理(5种情况)
- 全局作用域内 -- 当在全部作用域内使用
this
时,它将会指向全局对象,即window
对象 - 函数调用 -- 当在全局作用域内调用函数时,
this
也会指向全局对象。 - 方法调用 --
this
指向调用该方法的对象。 - 调用构造函数 -- 在构造函数内部,
this
指向新创建的对象。 - 显式的设置this指向 -- 当使用
call
或者apply
方法时,函数内的this
将会被显式设置为函数调用的第一个参数。
下面是我自己借鉴网上的一些总结,感觉写的不错
匿名函数
在JavaScript里任何匿名函数都是属于window对象。在定义匿名函数时候它会返回自己的内存地址,如果此时有个变量接收了这个内存地址,那么匿名函数就能在程序里被使用了(可以通过在这个变量后面加一对圆括号来调用这个匿名函数),因为匿名函数也是在全局执行环境构造时候定义和赋值,所以匿名函数的this指向也是window对象。(function(){
console.log(this == window); // true
})();
from myblog.
参数传递
按值传递
function test(num){ // 按值传递
num+=5;
console.log(num);
return num;
}
var num = 5;
var result = test(num);
console.log(result); // 10 如果是按引用传递,那么函数里的num会成为类似全局变量,把外面的num覆盖掉
console.log(num); // 5 也就是说,最后应该输出20(这里输出10)
注:js中不存在引用传递,如果存在引用传递的话,那么函数内的变量将是全局变量,在外部也可以访问,但这明显是不可能的
function setName(obj){ // obj = person
obj.name = "lisi";
obj = new Object();
obj.name = "wangwu";
}
var person = new Object();
setName(person);
console.log(person.name); // => lisi
console.log(obj.name); // Uncaught ReferenceError: obj is not defined
在将person传递给obj后,其name属性就被设置成了”lisi”。又将obj重新定义了一个对象,另一行代码为该对象定义了一个带有不同值的name属性。
如果person是按引用传递的,那么person就会自动被修改为指向其name属性值为”wangwu”的新对象,但事实上并没有,其name属性依然是”lisi”。
这就说明:即使在函数内部修改了参数的值,但原始的引用仍然保持不变。实际上,当在函数内重写obj时,这个变量引用的就是一个局部对象 了。而这个局部对象会在函数执行完毕后立即被销毁。
因此:访问变量有 按值 和 按引用 两种方式,而参数只能 按值传递。
from myblog.
Related Issues (20)
- 开发自己的cli工具 HOT 1
- 常用的ES6、ES7、ES8特性 HOT 3
- 在浏览器中输入URL地址到页面显示出来中间发生什么了呢? HOT 3
- 他强由他强,清风拂山岗 HOT 6
- 排序算法
- JavaScript继承 HOT 7
- 工作遇到的配置问题 HOT 2
- js触发子元素事件,而不触发父元素事件(阻止事件冒泡) HOT 2
- HTML input中type='file' Accept的值
- 二叉树心法秘籍
- 初探二叉树
- HTTPS初探 HOT 1
- 基于node的文件上传和下载 HOT 1
- axios拦截器处理重定向
- two sum
- 千分位格式化
- React生命周期和hock 的一些使用心得 HOT 1
- RN的TouchableOpacity的使用笔记
- 微信授权登录解密手机号失败
- moment.js工作中常用的api
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from myblog.