js 函数的参数声明中用 var 与不用 var的区别

看清问题!是函数声明中的参数 !!!!!!!!!!!!!!!!

function abc(var a){}
function def(a){}

var 声明的变量,作用域是当前 function
没有声明的变量,直接赋值的话, 会自动创建变量
但作用域是全局的.

//-----------------
function doSth() {
a = "AAA";
}
doSth(); // 执行一次 doSth
alert(a); // 可以看到 "AAA"
//-----------------

如果用了 var
//-----------------
function doSth() {
var a = "AAA";
}
doSth(); // 执行一次 doSth
alert(a); // 出错!!! 变量未定义, 因为 doSth 中声明的变量作用域只是 doSth 函数.

js数组中去除重复值
详细出处参考:http://www.jb51.net/article/25939.htm

typeof 运算符把类型信息当作字符串返回。typeof 返回值有六种可能: "number," "string," "boolean," "object," "function," 和 "undefined."
typeof 语法中的圆括号是可选项。

<script>
Array.prototype.del = function() {
var a = {}, c = [], l = this.length;
for (var i = 0; i < l; i++) {
var b = this[i];
var d = (typeof b) + b;
if (a[d] === undefined) {
c.push(b);
a[d] = 1;
}
}
return c;
}
alert([1, 1, 2, 3, 4, 5, 4, 3, 4, 4, 5, 5, 6, 7].del());
alert(["ad","bc","cd","ad"].del());
</script>

方法二:
js数组中去除重复值
//去重复数组
var arr = ["123","123","123","123","sfsdf","123","345","123","123","345","456","567","sdc"];
var str = [];
for(var i = 0,len = arr.length;i < len;i++){
! RegExp(arr[i],"g").test(str.join(",")) && (str.push(arr[i]));
}
alert(str);

详细出处参考:http://www.jb51.net/article/25939.htm

方法三:
function districtArray(array){
var result = new Array();
for(var i in array){
if(result.indexOf(array[i]) == -1){
result.push(array[i]);
}
}
return result;
}

<script>
Array.prototype.distinct = function(){
var $ = this;
var o1 = {};
var o2 = {};
var o3 = [];

var o;
for(var i=0;o = $[i];i++){
if(o in o1){
if(!(o in o2)) o2[o] = o;
delete $[i];
}else{
o1[o] = o;
}
}

$.length = 0;
for(o in o1){
$.push(o);
}

for(o in o2){
o3.push(o);
}

return o3;
}
var a = [2,2,2,3,3,3,4,4,5,6,7,7];
alert("原数组:" + a);
alert("有重复的元素是:" + a.distinct());
alert("整理后的数组是:" + a);
alert("整理后的长度是:" + a.length)
</script>

详细出处参考:http://www.jb51.net/article/13727.htm

Javacode 删除重复数组的字符串
import java.util.Arrays;
import java.util.List;
import java.util.LinkedList;

public class Tests {
public static String[] array_unique(String[] a) {
// array_unique
List<String> list = new LinkedList<String>();
for(int i = 0; i < a.length; i++) {
if(!list.contains(a[i])) {
list.add(a[i]);
}
}
return (String[])list.toArray(new String[list.size()]);
}

public static void main(String[] args) {
String[] ar = {"dd","cc","ee","ff","gg","cc","ee"};
String[] s = array_unique(ar);
for(String aa : s) {
System.out.print(aa+" ");
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-01-31
var 声明的变量,作用域是当前 function

没有声明的变量,直接赋值的话, 会自动创建变量
但作用域是全局的.

//-----------------
function doSth() {
a = "AAA";
}
doSth(); // 执行一次 doSth
alert(a); // 可以看到 "AAA"
//-----------------

如果用了 var
//-----------------
function doSth() {
var a = "AAA";
}
doSth(); // 执行一次 doSth
alert(a); // 出错!!! 变量未定义, 因为 doSth 中声明的变量作用域只是 doSth 函数.
//-----------------

另外,如果 函数套函数,还会使情况变得更加复杂

--------------------------------------------------------

函数定义中,声明的函数参数作用域都是函数本身的

如果,在参数声明中出现 var , 属于语法错误
第2个回答  2010-01-29
没错 JavaScript是语言强度比较弱,可以声明也可不声明。

不管是 参数声明 还是 变量的声明 都是一样的,都是因为JavaScript是语言强度问题,说到 区别 在作用方面是没有的,但是 还是推荐 声明的好,按严禁的 语法 规范写,变量 不容易混乱,而且 作用范围 也很清晰。
第3个回答  2013-03-13
这里有一个地方需要注意,函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量!

test();
function test()
{
i=1;
}
alert(i);

你试试,i前面加 var 和不加时候的区别就知道了.

参考资料:http://www.jb51.net/article/24101.htm

第4个回答  2010-01-29
JavaScript是弱类型语言
在声明变量时 不需要注明变量类型

但是请在声明变量的时候写var 这样代码比较规范

还涉及一个静态变量的问题。。