Функции Javscript с параметрами и без них

nomis221 спросил: 13 июня 2018 в 10:56 в: java

Javascript beginner здесь. Я пытаюсь понять разницу между двумя приведенными ниже примерами и почему они представляют разные результаты. Любая помощь могла бы быть полезна! Спасибо.

Пример 1

var age = 30;function changeAge(a) {
    a = 20;
}changeAge(age);
console.log(age); // ------ output = 30

Пример 2

var age = 30;function changeAge() {
    age = 20;
}changeAge();
console.log(age); // ------ output = 20

2 ответа

Есть решение
Luis Cardoza Bird ответил: 13 июня 2018 в 11:03

Почему я вижу, что ваш gps не получит ваше местоположение, и с этим вы всегда получаете нулевой указатель,

это класс, который я использую, когда хочу получить геолокацию

LocationDetector.kt

class LocationDetector(val context: Context) {    val fusedLocationClient: FusedLocationProviderClient = FusedLocationProviderClient(context)
    var locationListener: LocationListener? = null    interface LocationListener {
        fun locationFound(location: Location)
        fun locationNotFound(reason: String)
    }    fun detectLocation() {        //create request
        val locationRequest = LocationRequest()
        locationRequest.interval = 0L        // check for permission
        val permissionResult = ContextCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_FINE_LOCATION)        // if have permission, try to get location within 10 seconds
        if (permissionResult == android.content.pm.PackageManager.PERMISSION_GRANTED) {
            val timer = Timer()            val locationCallback = object : LocationCallback() {
                override fun onLocationResult(locationResult: LocationResult) {
                    fusedLocationClient.removeLocationUpdates(this)
                    timer.cancel()
                    // return location
                    locationListener?.locationFound(locationResult.locations.first())
                }
            }            timer.schedule(timerTask {
                fusedLocationClient.removeLocationUpdates(locationCallback)
                locationListener?.locationNotFound("Timeout")
            }, 10 * 1000) //10 seconds            // make request
            fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, null)
        } else {
            // if no permission
            locationListener?.locationNotFound("No permission given")
        }
    }

и способ, которым вы будете использовать

class MainActivity : AppCompatActivity(), LocationDetector.LocationListener {
    var isGPSRunning = false
    override fun locationFound(location: Location) {
   AppPreferencesSingleton(applicationContext).put(AppPreferencesSingleton.Key.latitude,location.latitude.toString())
    AppPreferencesSingleton(applicationContext).put(AppPreferencesSingleton.Key.longitude,location.longitude.toString())
}override fun locationNotFound(reason: String) {
    when(isGPSEnabled()){
        true -> {
            println("Waiting for GPS fix")
        }
        false -> {
            if (!isGPSRunning) {
                isGPSRunning = true
                startActivity(Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS))
            }
        }
    }
}fun isGPSEnabled() = (getSystemService(Context.LOCATION_SERVICE) as LocationManager).isProviderEnabled(LocationManager.GPS_PROVIDER)

Это находится в KOTLIN, но адаптация прост в использовании, пожалуйста, не забудьте указать в своем манифесте необходимые разрешения:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
Najeeb Pasha ответил: 14 июня 2018 в 07:30
как и где я могу добавить это в свой код @luis
Najeeb Pasha ответил: 14 июня 2018 в 07:37
могу ли я сказать, где я должен добавить это в свой .java-файл
Luis Cardoza Bird ответил: 14 июня 2018 в 09:39
Добавьте его в отдельный класс
Najeeb Pasha ответил: 14 июня 2018 в 10:34
создать файл new.java и вставить в него ??? @luis Cardoza Bird
Luis Cardoza Bird ответил: 14 июня 2018 в 10:37
Создайте класс kotlin, не волнуйтесь, Android Studio сообщит вам о расширении .kt, просто примите, и вы готовы пойти
Angel Politis ответил: 13 июня 2018 в 11:03

Два примера отличаются друг от друга:

  • В первом примере вы обновляете a, который является локальной переменной, потерянной в конце выполнение функции.

  • Во втором примере вы обновляете age, который является глобальной переменной и доступен всем.

Квинтэссенция этих примеров заключается в том, чтобы проиллюстрировать, что в JavaScript вы можете передавать переменные только по значению, а не по ссылке, как на других языках.


Чтобы сделать первый например, функционально то же самое, что и второе, вам нужно вернуть a и назначить результат функции age:

var age = 30;

function changeAge(a) {
  a = 20;
  return a; // or simply return 20;
}

age = changeAge(age);
console.log(age); // ------ output = 20

Дополнительное видео по вопросу: Функции Javscript с параметрами и без них

Google Maps API Setup (part1) - [Android Google Maps Course]

Start аndroid: Урок 139. Google maps: карта, камера, события (программирование под андроид)

Google Map With Android API V2