JavaScript你所不知道的困惑(3)
https://blog.csdn.net/lxq_xsyu/article/details/25600011
困惑一:
window.color = "red";
var o = {color: "blue"};
function sayColor(){
alert(this.color);
}
sayColor(); //red
sayColor.call(this); //red
sayColor.call(window); //red
sayColor.call(o); //blue
call方法能扩充函数作用域。每一个函数都包括两个非继承而来的方法:apply()和call(),这两个方法的用途是在特定的作用域中调用函数。
function sum(num1, num2){
return num1 + num2;
}
function callSum1(num1, num2){
return sum.apply(this, arguments);
}
function callSum2(num1, num2){
return sum.apply(this, [num1, num2]);
}
alert(callSum1(10, 10));
alert(callSum2(10, 10));
call()方法与apply()方法的作用同样,它们的差别仅在于接收參数的方式不同。对于call()方法而言。第一个參数是this值没有变化,变化的是其余參数都直接传递參数。
困惑二:
function add10(num){
return num + 10;
}
function getGreeting(name){
return "hello" + name;
}
function callSomeFunction(someFunction, someArgument){
return someFunction(someArgument);
}
var result1 = callSomeFunction(add10, 10);
alert(result1); //20
var result2 = callSomeFunction(getGreeting, "阳光小强");
alert(result2); //"hello阳光小强"
在ECMAScript中的函数名本身就是变量。所以函数也能够作为值来使用。
困惑三:
function factorial(num){
if(num <= 1){
return 1;
}else{
return num * arguments.callee(num - 1);
}
}
alert(factorial(10));
上面代码中的arguments.callee是什么意思?
在函数内部有两个特殊的对象:arguments和this。argument的主要作用是保存函数參数,但这个对象另一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数。另个个特殊对象this,是函数运行的环境对象。
困惑四:
eval("alert('hi')"); //hi
eval方法就像是一个完整的ECMAScript解析器。它仅仅接受一个參数。当解析器发现代码中调用eval方法时,它会将传入的參数当作实际的ECMAScript语句来解析,然后把运行结果插入到原位置。
ECMAScript中内置对象,由ECMAScript实现提供的,不依赖于宿主环境的对象。这些对象在ECMAScript程序运行之前就已经存在了。
开发者不必显式的实例化内置对象,由于它们已经实例化了。
如:Object、Array和String。ECMA-262还定义了两个单体内置对象:Global和Math
ECMAScript中的Global对象在某种意义上是作为一个终极的“兜底儿对象”来定义的。换句话说。不属于不论什么其它对象的属性和方法。终于都是他的属性和方法。其实。没有全局变量和全局函数;全部在全局作用域中定义的属性和函数。都是Global对象的属性。
如:isNaN()、isFinite()、parseInt()以及parseFloat()实际上都是Global对象的方法。
除此之外,Global对象还包括了其它一些方法。
1、URL编码方法。
2、eval()方法。
ECMAScript中尽管没有指出怎样直接訪问Global对象,但web浏览器都是将这个全局对象作为window对象的一部分加以实现的。因此。在全局作用域中声明的全部变量和函数,就都成为了window对象的属性。
3、Global对象还包括一些属性如undefined、NaN以及Infinity等。
4、Web浏览器都是将Global对象作为window对象的一部分加以实现的。因此,在全局作用域中声明全部变量和函数,就都成为了window对象的属性。
var color = "red";
function sayColor(){
alert(window.color);
}
window.sayColor(); //red
JavaScript你所不知道的困惑(3)的更多相关文章
- JavaScript你所不知道的困惑(2)
困惑一: var obj1 = new Object(); var obj2 = obj1; obj1.name = "阳光小强"; alert(obj2.name); //输出结 ...
- JavaScript你所不知道的困惑(1)
困惑一: 先看一个样例: function test(){ message = "hi"; } test(); alert(message); 会输出字符串"hi&quo ...
- JavaScript中你所不知道的Object(二)--Function篇
上一篇(JavaScript中你所不知道的Object(一))说到,Object对象有大量的内部属性,而其中多数和外部属性的操作有关.最后留了个悬念,就是Boolean.Date.Number.Str ...
- js值----你所不知道的JavaScript系列(6)
1.数组 在 JavaScript 中,数组可以容纳任何类型的值,可以是字符串.数字.对象(object),甚至是其他数组(多维数组就是通过这种方式来实现的) .----<你所不知道的JavaS ...
- js类型----你所不知道的JavaScript系列(5)
ECMAScirpt 变量有两种不同的数据类型:基本类型,引用类型.也有其他的叫法,比如原始类型和对象类型等. 1.内置类型 JavaScript 有七种内置类型: • 空值(null) • 未定义( ...
- 闭包----你所不知道的JavaScript系列(4)
一.闭包是什么? · 闭包就是可以使得函数外部的对象能够获取函数内部的信息. · 闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. · 闭包就 ...
- 你所不知道的setInterval
在你所不知道的setTimeout记载了下setTimeout相关,此篇则整理了下setInterval:作为拥有广泛应用场景(定时器,轮播图,动画效果,自动滚动等等),而又充满各种不确定性的这set ...
- 你所不知道的setTimeout
JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成.它们向任务队列添加定时任务.初始接触它的人都觉得好简单 ...
- 你所不知道的 URL
0.说明 第一幕 产品:大叔有用户反映账户不能绑定公众号.大叔:啊咧咧?怎么可能,我看看?大叔:恩?这也没问题啊,魏虾米.大叔:还是没问题啊,挖叉类.大叔:T T,话说产品姐姐是不是Java提供接口的 ...
随机推荐
- sql语句优化技巧
1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- class文件简介及加载
Java编译器编译好Java文件之后,产生.class 文件在磁盘中.这种class文件是二进制文件,内容是只有JVM虚拟机能够识别的机器码.JVM虚拟机读取字节码文件,取出二进制数据,加载到内存中, ...
- python模块学习之collections
更多信息请前往官网网址: https://docs.python.org/3.6/library/collections.html 8.3.5. namedtuple() 命名字段的元组的工场函数 命 ...
- linux shell自动输入实现
1 #!/bin/sh 2 3 while read line 4 do 5 str=$line 6 var1=`echo $str|awk -F ' ' '{pri ...
- 5.25思考双向绑定为什么容易接收js的方式
一直在考虑为什么html上面的双向绑定好像比winform上面的好用. 那是因为html可以输入任意的东西,不会有问题.而winform不行.这样导致了.html可以比较直观的处理这类需求. 举个例子 ...
- 谈谈 epmd
在<Erlang/OTP 并发编程实战>中,对 epmd 有如下描述: epmd 代表 Erlang 端口映射守护进程(Erlang Port Mapper Daemon). 每启动一个 ...
- poj 1548(最小路径覆盖)
题目链接:http://poj.org/problem?id=1548 思路:最小路径覆盖是很容易想到的(本题就是求最小的路径条数覆盖所有的点),关键是如何建图,其实也不难想到,对于当前点,如果后面的 ...
- ios --跳转到支付宝
//跳转到支付宝 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request nav ...
- ios关于数据的存储
本文转载至http://blog.csdn.net/chen505358119/article/details/9278539 这里我总结了一下数据的存储方式,一是保存在沙盒里 ...
- Java的版本历史与特性
一个比较流行的问题是,“Java下一个版本会有什么特性呢?” .这是否是个好问题却有待商榷.在下面的内容里,我总结了至今为止的Java主要发行版中各自引入的新特性,这样做的目的是为了突出各个新特性是在 ...