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(); //redJavaScript你所不知道的困惑(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提供接口的 ...
随机推荐
- Android开发之用双缓冲技术绘图
双缓冲技术主要用在画图,动画效果上,其原理就是:将资源先载入到缓冲区,然后再将缓冲区整个载入到View上面去. 双缓冲技术可以有效防止闪烁,提高显示质量. DrawView.java: package ...
- 转:winform_webApiSelfHost及 OWIN WebAPI Service
winform_webApiSelfHost 窗本构造函数中添加以下代码: var baseAddress = ConfigurationManager.AppSettings["baseA ...
- RapidIO协议(1)
RapidIO协议 1.概述 1.1介绍 RapidIO是基于包交换互联协议,主要作为系统内部接口使用,如:芯片间.板间的通讯,速度能在GB/S数量级.如连接处理器.内存.内存映射的I/O设备.这些设 ...
- php-fpm用socket连接
总结:在最新nginx.php下实践如下: 第一步:添加php5-fpm.sock文件 cd /var/run sudo vim php5-fpm.sock //啥也不写入,只要这个文件就可以了~ ...
- CenterOS卸载和安装MYSQL
1.首先在命令行输入mysql,看一下本地计算机上是否有mysql. 2.卸载mysql服务: 首先查看安装的rpm的包:rpm –qa |grep mysql 对之前的服务进行删除.rpm – ...
- 88. Merge Sorted Array【easy】
88. Merge Sorted Array[easy] Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 ...
- ROW_NUMBER() OVER (PARTITION BY M ORDER BY N DESC 好用
做查询的时候,发现一个问题,连接之后,有一个表里面有重复的数据.导致另一个表的记录,跟着重复了几遍.用户曾经反馈,评论会多出来几条, 一直没找到原因.只到发现这个问题.才发现了原因.因为一直用sql ...
- Trees on the level UVA - 122 复习二叉树建立过程,bfs,queue,strchr,sscanf的使用。
Trees are fundamental in many branches of computer science (Pun definitely intended). Current state- ...
- Help Tomisu UVA - 11440 难推导+欧拉函数,给定正整数N和M, 统计2和N!之间有多少个整数x满足,x的所有素因子都大于M (2<=N<=1e7, 1<=M<=N, N-M<=1E5) 输出答案除以1e8+7的余数。
/** 题目:Help Tomisu UVA - 11440 链接:https://vjudge.net/problem/UVA-11440 题意:给定正整数N和M, 统计2和N!之间有多少个整数x满 ...
- Phaser 桌面和手机游戏HTML5框架
Phaser是一个流行的2D开源游戏框架,可以用来开发桌面或手机浏览器HTML5游戏,适合侧视或顶视风格: Phaser同时支持Canvas和WebGL渲染引擎,预置了完备的精灵动画.输入 管理.瓦片 ...