今天在写js 全局变量作用域的时候,碰到了一个纳闷的问题
首先根据定义:全局变量有两种方式创建:
1 方法外部声明的变量,2 方法内部没有使用var关键字声明的变量
第一次代码
function Person(str){ this.name=str; } var p1=new Person('z3'); console.log(p1.name); //结果 z3 console.log(name); //结果 z3
一开始对于这两个结果,我认为是理所当然的;
第一个结果 p1.name 返回z3。首先函数内的this代表着指向当前调用者。通过Person对象创建了一个p1实例。再调用p1.name,此时的this指向就是这个对象实例。
第二个结果 name 返回 z3。 当时没有深究,认为this.name执行完之后创建的是一个全局变量(这里一下错了两个地方,后续说明)。
所以当时得出的总结是 1, this总是指向当前调用者,2,使用this.field可以创建全局变量。
在上面的代码再添加行代码
第二次代码
function Person(str){ this.name=str; this.age=25; } var p1=new Person('z3'); console.log(p1.name); //结果 z3 console.log(name); //结果 z3 console.log(p1.age); //结果25 console.log(age); // age is not defined
对这个结果一开始很不可思议,怎么name没问题,age 就变成了没有定义。
想了一会想不通之后, 打开firebug, 运行之后查看window这个对象有没有age这个变量(如果有就是全局变量)。一看果然没有
只有一个Person对象及这个对象的实例 p1。 那这个name是怎么回事? 继续看了下window相关的属性,居然看到了这么个东东
居然还有window.name这个属性,而且值默认是空字符""; 也就是说下面这样的代码完全可以执行,没有undefined, 也没有 xx is not defined
<script type=text/javascript>
alert(name);
</script>
把上面代码再做一个修改
第三次代码
function Person(str){ this.name=str; age=25; } var p1=new Person('z3'); console.log(p1.name); //结果 z3 console.log(name); //结果 z3 console.log(p1.age); //结果 undefined console.log(age); // 25
这一下就了然了,首先this只是代表指向当前调用者,this.field 不会创建全局变量。
第二个打印结果是正确的 是因为 name这个全局变量不是通过this.name创建的 而是window自带了一个name这个属性,并且默认值为""。通过this.name赋值,只是把window.name的默认值覆盖了。
第三个打印结果为undefined 原因很简单,age=25 是全局变量要调用只能是window.age或age。通过p1.age,只能是声明了一个变量但是未赋值,所以打印出来就是undefined
目前只是知道window对象中有name这个属性,而且它的作用很广,其中有个重要的作用是可以解决js中同源策略的问题。
相关推荐
总之,`window.name`跨域技术是JavaScript中一种较老但仍然有效的跨域数据传递方法,适用于对安全性要求不高且不涉及敏感数据的场景。随着现代浏览器的不断发展,更安全和高效的跨域解决方案如CORS已经成为了主流,...
在JavaScript的世界里,`window`对象是全局对象,它提供了与浏览器窗口进行交互的各种方法和属性。本篇文章将深入探讨`window.open()`、`window.opener`、`window.name`以及`window`对象的一些核心概念,同时通过两...
### JavaScript打开页面window.location与window.open的区别 #### 一、概述 在JavaScript中,`window.location` 和 `window.open` 都是用来控制浏览器导航的重要API,但它们在使用场景、功能特性和行为上有显著的...
`window.showModalDialog` 和 `window.open` 都是JavaScript提供的两种打开新窗口的方法,但它们在功能和使用场景上有着显著的区别。 首先,我们来详细探讨`window.showModalDialog`。`showModalDialog`方法用于...
### JavaScript中的`window.setTimeout()`详解 #### 一、概述 在JavaScript编程中,`window.setTimeout()`函数是一个非常重要的异步编程工具,它允许开发者在指定的时间后执行特定的代码片段。这一特性对于实现...
Window.open 是 JavaScript 中的一个方法,用于打开新的浏览器窗口。然而,在实际应用中,我们经常需要将弹出的窗口最大化,以便更好地展示内容。在本文中,我们将探讨如何使用 Window.open 方法来实现窗口的最大化...
在JavaScript中,`window.open`方法是一个非常实用的功能,它允许开发者创建新的浏览器窗口或标签页,并在其中加载指定的网页内容。这个方法在交互式用户界面设计中尤其常见,例如用于显示警告、确认对话框或者...
- `window.open()` 方法支持 JavaScript 1.0+/JScript 1.0+/Nav 2+/IE 3+/Opera 3+ 等浏览器。 - 在现代浏览器中,此方法通常都能正常工作,但在一些较旧或非主流浏览器中可能会出现问题。 #### 六、总结 `...
`window.showModalDialog`和`window.open`是JavaScript中用于实现这一目标的两个关键函数。它们都可以创建新窗口,但有着不同的特性和使用场景。 首先,`window.open()`是一个广泛使用的函数,它可以在浏览器中打开...
window.open使用方法以及参数说明一、window.open()支持环境: JavaScript1.0+/JScript1.0+/Nav2+/IE3+/Opera3+ 二、基本语法: window.open(pageURL,name,parameters) 其中: pageURL 为子窗口路径 name 为子窗口...
在前端开发中,`window.open()` 方法是浏览器内置的一个功能,用于在JavaScript中打开新的浏览器窗口。本文将深入探讨如何使用 `window.open()` 方法及其参数设置,帮助开发者更好地掌握此方法的用法。 #### 一、`...
window.name属性是浏览器窗口或者iframe的window对象的一个属性,它有一个很特别的特点:无论页面内容如何变化,或者页面如何导航跳转,只要window对象不被销毁,window.name的值都不会丢失。这个特性被利用来实现...
JavaScript中的`window.name`属性是一个独特且强大的工具,尤其在处理跨域通信时。它不受同源策略的限制,可以在不同页面甚至不同域名之间保持其值。这是因为`window.name`的值在页面重载或导航至其他URL时仍然保留...
在Web开发中,`window.open` 是一个JavaScript函数,它用于打开新的浏览器窗口或标签页。这个函数在处理用户交互,比如点击按钮打开新页面,或者在不同窗口间传递数据时非常常见。当我们谈论“window.open父子窗口...
在JavaScript的世界里,`window.open`、`iframe`和`dialog`是三个非常重要的概念,它们在网页交互和页面通信中扮演着关键角色。这里我们将深入探讨这些知识点,并结合实例来帮助你理解它们的用法。 1. `window.open...
在JavaScript中,`window.open()` 是一个非常有用的函数,它用于在浏览器中打开新的窗口或者标签页。在本文中,我们将深入探讨如何使用`window.open()`来创建并控制弹出窗口,尤其是如何实现窗口的最大化和获取焦点...
它的语法是 window.open(url, name, specs, replace),其中 url 是要打开的 URL,name 是窗口的名称,specs 是窗口的参数,replace 是是否替换当前页面。 五、window.open() 和 location.href 的区别 window.open...