<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
function maopao(arr){
var arr = [9,8,7,6,5,4,3,2,1];
//i是比较轮数;比较轮数=数组长度-1
//j是每轮比较的次数,比较次数=数组长度-当前轮数
for(var i = 0; i < arr.length; i++){
for(var j = 0; j < arr.length - (i + 1); j++){
if(arr[j] > arr[j + 1]){
var tmp = arr[j];
arr[j] = arr[j + 1];
arr[j +1] = tmp
}
}
}
return arr;
}
alert (arr);
alert(maopao(arr));
</script>
</head>
<body>
</body>
</html>
为什么把数组var arr = [9,8,7,6,5,4,3,2,1];放在函数内部
alert (arr);
alert(maopao(arr));
以上两个值就没有结果?
首先你再外部通过alert(maopao(arr))来调用maopao函数并传入一个参数arr,这一步就已经有问题了,arr会报错,arr is not defined(arr这个变量是未定义的),那么函数maopao是无法执行的,虽然函数maopao中定义了arr数组,但是这时的arr数组只是一个局部变量,没有办法在函数外部引用。
首先一个问题是你的arr是内部变量,对外部来说是不可见的。并且在你的函数定义中,有一个入参,你估计是想将内部变量作为外部变量并将这个参数给到函数,这就等同于你知道你买的一瓶汽水有再来一瓶,但是你不准备花钱就拿走这瓶汽水,因为它是再来一瓶
js里面有个东西叫做作用域,顾名思义:能起到作用的范围,一个方法算是一个作用域,作用域里面变量方法是无法被外界访问的
像这样
function fun(){
var arr=[1,2,3,4,5,];
/**
code
**/
return arr;
};
var g_arr=fun();