你的第二种写法好像是不对的,形参不用加var的,网上很多人说,javascript声明一个变量,有没有var都一样,其实不对的,没有加var话,其实就是声明了一个变量,只是给window对象加了一个属性而已,只有加了var才是声明一个变量,你可以复制下面的代码运行一下。<script type="text/javascript"> attribute=10; //给window对象添加一个属性attribute alert(attribute); //弹出属性的值 var flag = delete window.attribute; //删除window的attribute属性 alert(flag); //弹出true,证明属性删除成功了 //alert(attribute); //这里会报错,因为window的attribute属性已经被删除了 var variable=10; //声明一个变量 alert(variable); //弹出变量variable的值 flag = delete window.variable; //删除window的属性 alert(flag); //弹出false,删除window属性失败,因为variable是一个变量,不是window的属性 alert(variable); //弹出变量variable的值 </script>
你的第二种写法好像是不对的,形参不用加var的,网上很多人说,javascript声明一个变量,有没有var都一样,其实不对的,没有加var话,其实不是声明了一个变量,只是给window对象加了一个属性而已,只有加了var才是声明一个变量,你可以复制下面的代码运行一下。 JScript code <script type="text/javascript"> attribute=10; //给window对象添加一个属性attribute alert(attribute); //弹出属性的值 var flag = delete window.attribute; //删除window的attribute属性 alert(flag); //弹出true,证明属性删除成功了 //alert(attribute); //这里会报错,因为window的attribute属性已经被删除了 var variable=10; //声明一个变量 alert(variable); //弹出变量variable的值 flag = delete window.variable; //删除window的属性 alert(flag); //弹出false,删除window属性失败,因为variable是一个变量,不是window的属性 alert(variable); //弹出变量variable的值 </script> 上面打错一个字,意思反了,现在重新回复一下
请问:bbjbepzz, 下面我还有一个问题不明白: var dog = function (name) { this.Name = name; }; 与下面的有什么不同,请指教。 var dog = function (name) { var Name = name; };
用var 声明的是局部的 没有的是全局的
报错了,在firebug里面调试就知道. 考虑浏览器支持情况,肯定是第一种方法正确的.
<script> var dog = function (name) { //this表示调用该构造函数的对象实体。 this.Name = name; }; //当执行这句话的时候,上面的this就是d,从而d对象有了Name属性,并且值为aaa var d = new dog("aaa"); //aaa alert(d.Name); var dog = function (name) { var Name = name; }; //这时候d只是dog构造函数的一个实体,它并没有Name属性。因为在构造函数中,没有通过this来指向他,给他附加属性。 var d = new dog("aaa"); //undefined alert(d.Name); </script>
谢谢 #9,#10 的帮助!!!我还一点不明白! 你们是如何看待下面的代码,哪种写的比较规范? { var dog = function (name) { this.Name = name; this.AlertName=function(){alert(this.Name)}; }; var d = new dog("aaa"); d.AlertName(); } { var dog = function (name) { var Name = name; this.AlertName=function(){alert(Name)}; }; var d = new dog("aaa"); d.AlertName(); } 它们都是Alert("aaa");
非常感谢:bbjbepzz 的耐心作答! 再次请问: 您是如何看代下面的两种问题的区别的?//问题一 { var dog = function (name) { this.Name = name; this.AlertName=function(){setTimeout(function(){alert(this.Name)},2000);}; }; var d = new dog("aaa1"); d.AlertName(); } //问题二 { var dog = function (name) { var Name = name; this.AlertName=function(){setTimeout(function(){alert(Name)},2000);}; }; var d = new dog("aaa2"); d.AlertName(); } //问题一 :输出 undefined //问题二 :输出 aaa2
这个问题主要是出在你对this的理解上,你要知道问题一中的this指向什么,其实问题一里面的this指向是的window对象,不是d(你创建的那个实例),window对象没有这个Name属性,所以是undefined,你把代码改成下面这样就可以了。 var dog = function (name) { this.Name = name; this.AlertName=function(){var obj=this; setTimeout(function(){ alert(obj.Name)},2000);}; }; var d = new dog("aaa1"); d.AlertName();问题二的答案是aaa2就不一用解释了,因为这个变量的作用域是dog这个类,所以在这个类里面,都可以访问到Name变量。
<body> This is my JSP page. <br> <script type="text/javascript"> alert(window.str); alert(window.str2); </script>
</body> </html>
我感觉用不用var都行。 var dog = function (name) { this.Name = name; };与下面的有什么不同,请指教。 JScript code var dog = function (name) { var Name = name; }; 这个问题,我认为上面的是己经定义了Name做为全局变量,下面是刚定义做为局部变量
var声明的全局变量MS也是window的一个属性啊~....
<script type="text/javascript"> attribute=10; //给window对象添加一个属性attribute alert(attribute); //弹出属性的值 var flag = delete window.attribute; //删除window的attribute属性 alert(flag); //弹出true,证明属性删除成功了 //alert(attribute); //这里会报错,因为window的attribute属性已经被删除了 var variable=10; //声明一个变量 alert(variable); //弹出变量variable的值 flag = delete window.variable; //删除window的属性 alert(flag); //弹出false,删除window属性失败,因为variable是一个变量,不是window的属性 alert(variable); //弹出变量variable的值 </script> 你运行一上面的代码就知道有没有var区别了。 你说的那两句代码的不同,我认为如下:第一种是面向对象的写法,dog就相当一个类,也是构造方法,第二种就只是一个普通的方法。
attribute=10; //给window对象添加一个属性attribute
alert(attribute); //弹出属性的值
var flag = delete window.attribute; //删除window的attribute属性
alert(flag); //弹出true,证明属性删除成功了
//alert(attribute); //这里会报错,因为window的attribute属性已经被删除了
var variable=10; //声明一个变量
alert(variable); //弹出变量variable的值
flag = delete window.variable; //删除window的属性
alert(flag); //弹出false,删除window属性失败,因为variable是一个变量,不是window的属性
alert(variable); //弹出变量variable的值
</script>
JScript code
<script type="text/javascript">
attribute=10; //给window对象添加一个属性attribute
alert(attribute); //弹出属性的值
var flag = delete window.attribute; //删除window的attribute属性
alert(flag); //弹出true,证明属性删除成功了
//alert(attribute); //这里会报错,因为window的attribute属性已经被删除了
var variable=10; //声明一个变量
alert(variable); //弹出变量variable的值
flag = delete window.variable; //删除window的属性
alert(flag); //弹出false,删除window属性失败,因为variable是一个变量,不是window的属性
alert(variable); //弹出变量variable的值
</script>
上面打错一个字,意思反了,现在重新回复一下
下面我还有一个问题不明白:
var dog = function (name)
{
this.Name = name;
};
与下面的有什么不同,请指教。
var dog = function (name)
{
var Name = name;
};
报错了,在firebug里面调试就知道.
考虑浏览器支持情况,肯定是第一种方法正确的.
<script>
var dog = function (name) {
//this表示调用该构造函数的对象实体。
this.Name = name;
};
//当执行这句话的时候,上面的this就是d,从而d对象有了Name属性,并且值为aaa
var d = new dog("aaa");
//aaa
alert(d.Name); var dog = function (name) {
var Name = name;
}; //这时候d只是dog构造函数的一个实体,它并没有Name属性。因为在构造函数中,没有通过this来指向他,给他附加属性。
var d = new dog("aaa");
//undefined
alert(d.Name);
</script>
你们是如何看待下面的代码,哪种写的比较规范?
{
var dog = function (name) {
this.Name = name;
this.AlertName=function(){alert(this.Name)};
};
var d = new dog("aaa");
d.AlertName();
}
{
var dog = function (name) {
var Name = name;
this.AlertName=function(){alert(Name)};
};
var d = new dog("aaa");
d.AlertName();
}
它们都是Alert("aaa");
再次请问:
您是如何看代下面的两种问题的区别的?//问题一
{
var dog = function (name) {
this.Name = name;
this.AlertName=function(){setTimeout(function(){alert(this.Name)},2000);};
};
var d = new dog("aaa1");
d.AlertName();
}
//问题二
{
var dog = function (name) {
var Name = name;
this.AlertName=function(){setTimeout(function(){alert(Name)},2000);};
};
var d = new dog("aaa2");
d.AlertName();
}
//问题一 :输出 undefined
//问题二 :输出 aaa2
var dog = function (name) {
this.Name = name;
this.AlertName=function(){var obj=this; setTimeout(function(){ alert(obj.Name)},2000);};
};
var d = new dog("aaa1");
d.AlertName();问题二的答案是aaa2就不一用解释了,因为这个变量的作用域是dog这个类,所以在这个类里面,都可以访问到Name变量。
所以this 是指向window!所以第一个会undefined!
,你写匿名函数在setTimeout里面 ,根本不会重复调用!
这写法真疼!
bbjbepzz 已经把问题说得行清楚了!
name="小黄";
上下等价
window.name="小黄";
//
//下面是声明一个func
function abc(){
...
};
上下等价
window abc = function (){
...
};
上下等价
this.abc = function (){
...
};这些,都是 bbjbepzz 的功劳!
其实 bbjbepzz 已经把问题说得行清楚了!
name="小黄";
上下等价
window.name="小黄";
//
//下面是声明一个func
function abc(){
...
};
上下等价
window abc = function (){
...
};
上下等价
this.abc = function (){
...
};这些,都是 bbjbepzz 的功劳!
bbjbepzz 已经把问题说得行清楚了!
name="小黄";
上下等价
window.name="小黄";
//
//下面是声明一个func
function abc(){
...
};
上下等价
window abc = function (){
...
};
上下等价
this.abc = function (){
...
};这些,都是 bbjbepzz 的功劳!
我总结一下:
thisYear = "2011";
上下行价:
window.thisYear = "2011";
下面是function 的例子:
以下三种方式 声明 都是等价的, (就是就,下面三种方法,你写哪一种,结果一样!)
//声明方式一
function a(){alert("a")}
//声明方式二
a = function (){alert("a")};
//声明方式三
window.a = function (){alert("a")};
这些都要的归功于bbjbepzz !
再次感谢!
看看一下的代码,为什么用window的属性方式都能访问到变量?<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'TestWithoutVar.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript">
str = "没有var关键字的变量其实就是window的一个属性";
var str2 = "带var的变量";
</script>
</head>
<body>
This is my JSP page. <br>
<script type="text/javascript">
alert(window.str);
alert(window.str2);
</script>
</body>
</html>
var dog = function (name)
{
this.Name = name;
};与下面的有什么不同,请指教。
JScript code
var dog = function (name)
{
var Name = name;
};
这个问题,我认为上面的是己经定义了Name做为全局变量,下面是刚定义做为局部变量
attribute=10; //给window对象添加一个属性attribute
alert(attribute); //弹出属性的值
var flag = delete window.attribute; //删除window的attribute属性
alert(flag); //弹出true,证明属性删除成功了
//alert(attribute); //这里会报错,因为window的attribute属性已经被删除了
var variable=10; //声明一个变量
alert(variable); //弹出变量variable的值
flag = delete window.variable; //删除window的属性
alert(flag); //弹出false,删除window属性失败,因为variable是一个变量,不是window的属性
alert(variable); //弹出变量variable的值
</script>
你运行一上面的代码就知道有没有var区别了。
你说的那两句代码的不同,我认为如下:第一种是面向对象的写法,dog就相当一个类,也是构造方法,第二种就只是一个普通的方法。