不同浏览器javascript变量作用域的处理方法

1.关于prototype:这里prototype是javascript的一个特性,不是那个有名的prototype框架:

var string="hello world";
try{
alert(string.phone());
}catch(e){alert(e);}
String.prototype.phone=function()
{
return "159-10957151";
}

alert(string.phone());

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

2.关于变量作用域,和IE,firefox对js的不同处理,这里有几个例子,有几个是原来从别处看到的记的笔记,有的是我自己挖掘出来的.
2.1

var deep_thought = {
the_answer: 42,
ask_question: function () {
return this.the_answer;
}
};

var the_meaning = deep_thought.ask_question();
alert(the_meaning);

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

2.2

function test_this() {
return this;
}
var i_wonder_what_this_is = test_this();
alert(i_wonder_what_this_is);
// result: [object window];

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

2.3:

function click_handler() {
alert(this); // 弹出 window 对象
}

...
Click me!

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

2.4

function click_handler(obj) {
alert(obj);
//result:[object HTMLButtonElement]
}

...
Click me!

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

2.5

Click me!

function BigComputer(answer) {
this.the_answer = answer;
this.ask_question = function () {
alert(this.the_answer);
}
}

function addhandler() {
var deep_thought = new BigComputer(42),
the_button = document.getElementById('thebutton');
the_button.onclick = deep_thought.ask_question;
}
window.onload = addhandler;
//result [undefined]

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

2.6

Click me!

function BigComputer(answer) {
var self=this;
self.the_answer = answer;
self.ask_question = function () {
alert(self.the_answer);
}
}

function addhandler() {
var deep_thought = new BigComputer(42),
the_button = document.getElementById('thebutton');
the_button.onclick = deep_thought.ask_question;
}
window.onload = addhandler;
//result [42]

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

2.7

Click me!

function btn_click(){
alert(this);
}

function addhandler() {
the_button = document.getElementById('thebutton');
the_button.onclick = btn_click;
}

window.onload = addhandler;

//result [undefined]

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

2.8

Click me!

function real_func()
{
alert(this);
}
function btn_click(){
setTimeout(real_func,100);
}

function addhandler() {
the_button = document.getElementById('thebutton');
the_button.onclick = btn_click;
}

window.onload = addhandler;

//result [undefined]

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

2.9

Click me!

Function.prototype.bind = function(obj) {
var method = this,
temp = function() {
return method.apply(obj, arguments);
};

return temp;
}
var real_func=function()
{
alert(this);
}
function btn_click(){
setTimeout( real_func.bind(this),100);
}
function addhandler() {
the_button = document.getElementById('thebutton');
the_button.onclick = btn_click;
}
window.onload = addhandler;
//result [undefined]

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

2.10

//** variables need to be defined
alert(document); // [object HTMLdocument]
alert(window.document); // [object HTMLdocument]

alert(window.face); //pretty
var face="pretty";
alert(face); //pretty
alert(window.face); //pretty
alert(window.sock); //undefined
alert(sock); // ERROR: sock not defined

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

2.11

function method()
{
var window={};
alert(window.location);
}
alert(window.location);
method();
alert(window.location);

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

2.12

var window={};//ERROR:非法赋值!
// this works in IE,but throw an Exception in firefox
alert(window.location);

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

2.13

/** 这是一段很让人恼火的代码
可以禁用alert
*/
window.alert("hello world");
window.alert=function(str){
document.write(str);
};
alert("hello world");
window.alert("hello world");

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

2.14:

注意这三个html文件的结果有什么不同.
a.html:

alert(sock);
function sock()
{
alert("function sock executed!");
}
alert(sock);

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

b.html:

alert(sock);
var sock=function()
{
alert("function sock executed!");
}
alert(sock);

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

c.html:

// 这里并不弹出"undefined"
// 有点偏心啊!
alert(sock);

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

2.15

看看IE,firefox下分别运行有何不同:

Object.prototype.hello=function(){
alert("hello");
}
window.hello();

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

(0)

相关推荐

  • 理解JavaScript变量作用域更轻松

    JavaScript本身作为一门简单的语言,就其变量作用域问题一样令不少人头晕,这主要是因为JavaScript闭包的存在.本文不打算深入讲解JavaScript变量作用域问题(其实本人也没有能力能把这一话题讲的深入些),也不讲"闭包"话题,本文只讨论最实用的JavaScript作用域知识点. 一.JavaScript作用域分类 JavaScript就两种作用域:全局(window).函数级(function).函数级(function)不要理解为"块级(大括号{}级)&qu

  • JavaScript 变量作用域及闭包第1/2页

    实例一: 复制代码 代码如下: <script type="text/javascript"> var i = 1; // 弹出内容为 1 true 的提示框 alert(window.i + ' ' + (window.i == i)); </script> 分析: 在全局定义的变量其实就是 window 对象的属性. 上面的例子可以看到,我们定义全局变量的同时,window 对象会产生一个相应的属性,如何让我们的代码避免产生这个属性呢,看下面的例子. 实例二

  • JavaScript 变量作用域分析

    复制代码 代码如下: /* 代码1 */ var scope = "global "; function checkScope() { var scope = "local "; function childCheck() { var scope = "childLocal "; document.write(scope); } function childUndefined() { document.write(scope); var scop

  • javascript 变量作用域 代码分析

    代码清单1-1 展示javascript的变量作用域的例子 //设置全局变量foo,并置为"test" var foo = "test"; //在if块中 if(true){ //将foo置为'new test' var foo = "new test"; } //如我们所见,现在foo等于'new test'了 alert(foo == "new test"); //创建一个会修改变量foo的新函数 function tes

  • 关于javascript 回调函数中变量作用域的讨论

    1.背景 Javascript中的回调函数,相信大家都不陌生,最明显的例子是做Ajax请求时,提供的回调函数, 实际上DOM节点的事件处理方法(onclick,ondblclick等)也是回调函数. 在使用DWR的时候,回调函数可以作为第一个或者最后一个参数出现,如: JScript code function callBack(result){ } myDwrService.doSomething(param1,param2,callBack);//DWR的推荐方式 //或者 myDwrSer

  • js变量作用域及可访问性的探讨

    每一种语言都有变量的概念,变量是用来存储信息的一个元素.比如下面这个函数: 复制代码 代码如下: function Student(name,age,from)  {   this.name = name;    this.age = age;   this.from = from;    this.ToString = function()   {    return "my information is name: "+this.name+",age : "+t

  • Javascript 变量作用域 两个可能会被忽略的小特性

    也许有些高手早已知道了,但是我觉得这两个东西还是有一些价值的,所以拿到这里和大家分享一下吧. 有如下代码: 复制代码 代码如下: <script type="text/javascript" > function test() { with (location) { var temp = "an url"; } alert(temp); } test(); </script> 调用这个函数会输出什么呢? 也许会认为它会弹出undefined,

  • JavaScript的变量作用域深入理解

    在学习JavaScript的变量作用域之前,我们应当明确几点: a.JavaScript的变量作用域是基于其特有的作用域链的. b.JavaScript没有块级作用域. c.函数中声明的变量在整个函数中都有定义. 1.JavaScript的作用域链 首先看下下面这段代码: 复制代码 代码如下: <script type="text/javascript" language="javascript"> var rain = 1; function rain

  • 不同浏览器javascript变量作用域的处理方法

    1.关于prototype:这里prototype是javascript的一个特性,不是那个有名的prototype框架: var string="hello world"; try{ alert(string.phone()); }catch(e){alert(e);} String.prototype.phone=function() { return "159-10957151"; } alert(string.phone()); [Ctrl+A 全选 注:如

  • JavaScript变量作用域及内存问题实例分析

    本文实例讲述了JavaScript变量作用域及内存问题.分享给大家供大家参考,具体如下: 学习要点: 1.变量及作用域 2.内存问题 JavaScript的变量与其他语言的变量有很大区别.JavaScript变量是松散型的(不强制类型)本质,决定了它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何种数据类型值的规则,变量的值及其数据类型可以在脚本的生命周期内改变. 一.变量及作用域 1.基本类型和引用类型的值 ECMAScript变量可能包含两种不同的数据类型的值:

  • JavaScript变量作用域_动力节点Java学院整理

    在JavaScript中,用var申明的变量实际上是有作用域的. 如果一个变量在函数体内部申明,则该变量的作用域为整个函数体,在函数体外不可引用该变量: 'use strict'; function foo() { var x = 1; x = x + 1; } x = x + 2; // ReferenceError! 无法在函数体外引用变量x 如果两个不同的函数各自申明了同一个变量,那么该变量只在各自的函数体内起作用.换句话说,不同函数内部的同名变量互相独立,互不影响: 'use stric

  • javascript变量作用域使用中常见错误总结

    今天在rainweb的博客上,看到了这篇非常好的文章,觉得非常有必要分享出来,相信大家认真读完这篇文章,对js作用域的理解又会上升到一个新的台阶. 前言:javascript里变量作用域是个经常让人头痛抓狂的问题,下面通过10++个题目,对经常遇到又容易出错的情况进行了简单总结,代码样例很短很简单 题目一 复制代码 代码如下: var name = 'casper'; alert(name); //毫无疑问地输出:casper 题目二 复制代码 代码如下: alert(name); //报错:对

  • 浅谈Javascript变量作用域问题

    Js中的变量作用域问题: 1.没有块级作用域.Js中的变量作用域不是以{}为界的,不像C/C++/Java. 如: 复制代码 代码如下: if(true){      var name = "qqyumidi";  }               alert(name);  // 结果:qqyumidi Js会将在if中定义的变量添加到当前的执行环境中,尤其在使用for循环时需要注意与其他语言的差异. 复制代码 代码如下: for(var i=0; i<10; i++){    

  • Javascript变量作用域详解

    变量的作用域指的是变量的可见性,而生命周期则(存活期)则是从另一个角度考察变量. JS中变量的作用域分为全局变量和局部变量,函数内定义的称为局部变量,函数外的称为全局变量.("函数外的称为全局变量"是相对的,另此处讨论的前提是用var显式声明的变量,函数内不用var定义的变量默认是全局变量,当然忽略var声明变量是不赞成的). 复制代码 代码如下: var glob = 4;//函数外声明全局变量 function fun() {     var height = 20; //函数内用

随机推荐